变基后出现大量提交记录如何修复?
修复变基后误合并导致的PR提交混乱问题
问题根源
你执行git rebase origin/master后,本地特性分支已经将你的提交重新应用到了最新的master分支上,但随后执行的git pull默认触发了合并操作,把远程特性分支的旧提交和本地变基后的分支强行合并,生成了多余的合并提交。最后强制推送后,这些混乱的提交就被同步到了GitHub的PR中。
修复步骤
方法一:重置后重新挑选你的提交(适合记不清变基前状态的情况)
- 先确保本地master分支是最新版本:
git checkout master git pull origin master - 切换回你的特性分支:
git checkout your-feature-branch # 替换成你的特性分支名称 - 重置特性分支到最新master的状态(此操作会清除当前分支的所有提交,务必先记录好自己的提交哈希):
git reset --hard master - 用
git log --oneline找到你特性分支上真正属于你的提交的哈希值,按顺序挑选到当前分支:git cherry-pick <提交哈希1> <提交哈希2> ...- 如果挑选过程中出现冲突,解决冲突后执行
git cherry-pick --continue,直到所有提交挑选完成
- 如果挑选过程中出现冲突,解决冲突后执行
- 最后强制推送到远程特性分支:
git push --force-with-lease origin your-feature-branch
方法二:利用reflog恢复到变基前状态(适合能找到变基前记录的情况)
- 查看本地分支的操作日志,找到执行
git rebase之前的分支状态:git reflog- 找到类似
xxxxxx HEAD@{n}: commit: 你的最后一个提交(变基前)的记录,复制对应的哈希值
- 找到类似
- 重置特性分支到该状态:
git reset --hard <复制的哈希值> - 重新执行变基操作:
git rebase origin/master- 若出现冲突,解决冲突后执行
git rebase --continue,直到变基完成
- 若出现冲突,解决冲突后执行
- 强制推送到远程:
git push --force-with-lease origin your-feature-branch
后续注意事项
- 变基操作会改写提交历史,变基完成后绝对不要执行普通的
git pull,否则会触发不必要的合并。如果需要同步远程分支,用git pull --rebase或者直接强制推送(仅当你独自维护该特性分支时) git push --force-with-lease比git push --force更安全,它会检查远程分支是否有你未同步的更新,避免覆盖他人的提交- 若团队习惯用
merge,也可以放弃变基,直接执行git merge origin/master来同步master的更新,但这样PR中会多一条合并提交记录
内容的提问来源于stack exchange,提问作者FlushBG
相关产品推荐
相关产品推荐

