如何在已完成Squash合并的Git分支上再次Squash新提交?
把新提交 squash 到已推送的历史提交上的操作方法
先看提交历史示意图:
具体操作步骤如下:
第一步,查看提交历史,定位到
ALL Tests提交的哈希值。执行命令:git log --oneline
在输出里找到ALL Tests对应的提交ID(比如开头的一串字母数字,像a1b2c3)。第二步,启动交互式变基,目标是
ALL Tests提交的父提交:git rebase -i <ALL Tests的提交ID>^
注意末尾的^不能少,它表示要变基到目标提交的上一个节点。第三步,在弹出的编辑器里修改提交指令:
编辑器里会列出ALL Tests之后的2个新提交,把这两行开头的pick改成squash(或简写s),ALL Tests那行保持pick不变。保存并关闭编辑器。第四步,修改合并后的提交信息:
Git会再次弹出编辑器,让你编辑合并后的提交说明,你可以保留原来的ALL Tests,或者补充新增内容的描述,完成后保存关闭。第五步,强制推送修改后的历史到远程:
git push --force-with-lease
用--force-with-lease比直接--force更安全,能防止意外覆盖他人的提交。
⚠️ 注意事项:
- 如果这个分支有其他协作开发者,强制推送会打乱他们的本地仓库,一定要提前沟通好再操作。
- 操作前确保本地没有未提交的修改,可先用
git stash暂存,操作完成后用git stash pop恢复。
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

