Git提交合并咨询:如何将Commit 2、3合并为单个提交?
当然可行啦!Git的交互式变基(rebase)完全能满足你这种只合并中间特定提交的需求,不用非得从最开头重新整理一遍~下面是具体的操作步骤:
第一步:准备工作
先确保你当前在目标分支上,并且没有未提交的改动(可以用git status检查,输出里应该显示“nothing to commit, working tree clean”)。第二步:启动交互式变基
运行以下命令,它会让你编辑从当前HEAD往前数3个提交的操作范围(刚好覆盖Commit2、Commit3、Commit4):git rebase -i HEAD~3如果你知道Commit1的哈希值,也可以直接用它作为基准,效果完全一样:
git rebase -i <Commit1的哈希值>第三步:修改提交操作
执行命令后会打开一个文本编辑器,里面会列出要处理的提交(顺序是从旧到新,Commit2在上,Commit3中间,Commit4在下),大概长这样:pick a1b2c3d Commit 2 pick d4e5f6g Commit 3 pick g7h8i9j Commit 4把Commit3前面的
pick改成squash(或者缩写s),表示要把这个提交合并到它前面的Commit2中。修改后内容如下:pick a1b2c3d Commit 2 squash d4e5f6g Commit 3 pick g7h8i9j Commit 4第四步:编辑合并后的提交信息
保存并关闭编辑器后,Git会自动弹出另一个编辑器,让你编辑合并后的提交信息。你可以把Commit2和Commit3的原有信息整合起来,或者直接写一段新的清晰描述,完成后保存关闭即可。第五步:处理冲突(如果有的话)
如果合并过程中出现代码冲突,先手动解决冲突文件里的标记内容,然后用git add .标记冲突已解决,接着运行:git rebase --continue要是中途想放弃整个操作,直接执行:
git rebase --abort第六步:推送修改后的历史(如果分支已推送到远程)
因为你修改了Git提交历史,普通推送会失败,需要用强制推送。这里推荐用更安全的--force-with-lease参数,它会避免覆盖其他人在远程分支上的新改动:git push --force-with-lease
内容的提问来源于stack exchange,提问作者JainAnk

