解决分支合并冲突后,能否将多个提交压缩为单个提交?
可以将Commit 1至Commit 4压缩为单个提交吗?
完全可以,你可以通过**交互式变基(interactive rebase)**实现这个需求,具体操作步骤如下:
先确保本地的feature分支F是最新版本:
git checkout F git pull切回你的分支A:
git checkout A启动交互式变基,基于分支F的起点调整提交(会列出所有从F分叉后你在A上的提交):
git rebase -i F在弹出的文本编辑器中,你会看到按时间从旧到新排列的提交列表:
pick <commit-hash-1> commit 1 pick <commit-hash-2> commit 2 pick <commit-hash-3> commit 3 pick <commit-hash-4> commit 4 pick <commit-hash-5> resolve conflict pick <commit-hash-6> commit 5- 保留第一行(commit 1)的
pick前缀 - 将commit 2、3、4对应的行的
pick改成squash(或简写s),这几个提交会被合并到commit 1中 - 若想把冲突解决的提交和commit 5也一并合并,同样可以把它们的
pick改成squash;如果需要保留这两个提交,就保持pick不变
- 保留第一行(commit 1)的
保存并关闭编辑器,Git会自动合并指定提交。如果合并过程中出现冲突,解决冲突后执行:
git add . git rebase --continue若想终止变基,可执行
git rebase --abort变基完成后,你的分支A就会得到合并后的单个提交(以及你选择保留的后续提交),最终结构与你期望的一致。
注意:如果分支A已经推送到远程仓库,变基后需要强制推送更新,建议执行
git push --force-with-lease(比直接--force更安全,避免覆盖他人未同步的修改)
内容的提问来源于stack exchange,提问作者Anand Madhab
相关产品推荐
相关产品推荐

