Git交互式变基疑问:为何意外合并提交而非仅修改指定提交
问题原因分析
你之所以会把两个提交合并成一个,核心问题出在冲突处理阶段错误执行了git commit --amend。
具体过程拆解:
- 你通过交互式变基选择编辑第一个提交(倒数第二个),修改文件后执行
git commit --amend更新该提交,这一步是正确的。 - 执行
git rebase --continue后,Git尝试把第二个提交(712be094f96)变基到修改后的第一个提交上,此时出现冲突——因为你在第一个提交里删除的行,第二个提交也有相关修改。 - 此时Git处于变基的冲突暂停状态,正确的操作应该是:
- 确认冲突已解决(你觉得文件没问题,说明冲突已经处理完毕)
- 执行
git add <file>暂存解决后的文件 - 直接执行
git rebase --continue让变基继续推进
- 但你错误地再次执行了
git commit --amend,这会把当前工作区的内容(包含第二个提交的修改)合并到正在编辑的第一个提交里,相当于把第二个提交的内容“整合”进了第一个提交,最终导致两个提交被合并成一个。
符合需求的正确操作流程:
- 执行
git rebase -i @~~,将第一个提交的命令改为edit - 修改文件后,执行
git add <file>+git commit --amend更新第一个提交 - 执行
git rebase --continue,遇到冲突时:- 确认文件内容正确后,执行
git add <file> - 直接执行
git rebase --continue,不要使用git commit --amend
- 确认文件内容正确后,执行
这样就能单独修改倒数第二个提交,同时让第二个提交正常变基到修改后的版本上。
内容的提问来源于stack exchange,提问作者peter.slizik
相关产品推荐
相关产品推荐

