如何将最后两次提交压缩到已有merge提交,解决git rebase报错
你遇到的报错是因为git rebase -i默认会丢弃合并提交,你执行git rebase -i HEAD~3时,rebase生成的操作序列中不会包含目标合并提交,你想要压缩的两个提交找不到前置的父提交用来合并,所以触发了"cannot squash without a previous commit error"报错。
解决操作步骤
- 执行带合并提交保留参数的交互式rebase命令:
git rebase -i --rebase-merges HEAD~3 - 弹出的操作列表中,找到对应哈希为
398ec03、提交信息为merge release into feature的行,保持行首的pick不变 - 将后续两行(对应
dfa4fc的update ui提交、6a4fc的show logo提交)行首的pick修改为squash(可简写为s) - 保存退出编辑器,此时会弹出提交信息编辑界面,你可以保留
merge release into feature的提交信息,删掉另外两个提交的冗余信息后保存,即可完成压缩。
注意事项
- 如果该分支已经推送到远程仓库,压缩完成后需要执行
git push --force-with-lease强制推送更新远程分支,该命令比直接git push -f更安全,会避免覆盖其他人最新提交 - 若该分支有多人共同开发,操作前请确保和团队成员同步,避免修改公共提交历史导致其他人本地代码冲突。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

