如何在Git的master分支合并多个历史提交且避免分离头?
解决Git合并中间提交并保留master分支的方法
正确操作步骤
- 先确保当前处于
master分支:git checkout master - 执行交互式变基,以提交
A为基准(我们要修改A之后的提交):git rebase -i A - 在弹出的编辑器中,会列出
A之后的所有提交:B、C、D、E,按如下修改:- 保留
B前面的pick不变 - 将
C和D前面的pick改为squash(或缩写s) - 保留
E前面的pick不变
修改后示例:
pick <B的提交哈希> 提交B的说明 squash <C的提交哈希> 提交C的说明 squash <D的提交哈希> 提交D的说明 pick <E的提交哈希> 提交E的说明 - 保留
- 保存并关闭编辑器,Git会自动合并
B、C、D为新提交B',并将E衔接在B'之后。完成后你仍处于master分支,提交历史变为A -> B' -> E。
你之前操作出错的原因
你执行的git rebase -i A D命令,是指定把从A之后到D的提交变基到D上,这会让Git进入分离头状态(HEAD指向D而非master分支),且没有把E纳入变基流程,完全不符合你的需求。直接在master分支上执行git rebase -i A,Git会自动在变基完成后更新master分支,不会出现分离头问题。
内容的提问来源于stack exchange,提问作者Mojie11
相关产品推荐
相关产品推荐

