如何调整Git提交顺序:将Rebased提交X移至提交栈顶部?
解决Git提交顺序调整的冲突复用问题
方法一:利用reflog找回原分支(最直接)
- 执行
git reflog,找到你执行rebase X操作前的分支头哈希值(记为OLD_HEAD),该状态下分支提交顺序为A->B->C->D。 - 创建并切换到临时分支:
git checkout -b temp OLD_HEAD - 将提交
Xcherry-pick到临时分支:git cherry-pick X- 若出现冲突,可先开启Git冲突复用功能自动解决:
git config --global rerere.enabled true,再重新执行cherry-pick。
- 若出现冲突,可先开启Git冲突复用功能自动解决:
- 切换回工作分支并重置到临时分支状态:
git checkout your-branch && git reset --hard temp - 删除临时分支:
git branch -D temp
方法二:启用rerere后用交互式rebase
- 开启冲突自动复用功能:
git config --global rerere.enabled true - 执行交互式rebase调整提交顺序:
git rebase -i HEAD~5(数字5对应当前分支总提交数:X+A'+B'+C'+D') - 在弹出的编辑界面中,将
X对应的行剪切到最后一行,保存退出。 - Git会自动复用之前的冲突解决结果,无需手动重复处理。
为什么之前会重复解决冲突?
当你把X移到D'之后,Git需要将X重新应用到D'的提交基础上,这和之前将A'-D'应用到X上的冲突是反向的。默认情况下Git不会记录冲突解决历史,因此需要重复处理。而rerere(reuse recorded resolution)功能会记录冲突的解决方式,遇到反向冲突时自动复用。
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

