如何从已经完成变基的Git分支中删除指定提交?
你之前执行的命令报错是因为~语法后面只能跟数字,表示相对于指定提交向后偏移n个父提交,不能直接拼接提交哈希,以下是两种可行的删除方案:
方案1:交互式变基(最直观易用,推荐)
你要删除的fcf0c4a提交位于feature/orphans分支的提交链中,父提交是当前develop分支的HEAD2505060,直接执行交互式变基命令即可:
git checkout feature/orphans git rebase -i 2505060
执行后会弹出文本编辑框,找到对应fcf0c4a的那一行,将行首的pick改为drop,保存并关闭编辑窗口,Git会自动执行变基操作,完成后fcf0c4a提交就会从当前分支中移除。
方案2:使用rebase --onto(非交互模式,适合脚本调用)
如果你不需要交互编辑,可以直接执行正确的rebase --onto命令完成删除:
git rebase --onto fcf0c4a~1 fcf0c4a feature/orphans
命令逻辑说明:将fcf0c4a提交之后、到feature/orphans分支HEAD的所有提交,整体迁移到fcf0c4a的父提交(也就是2505060)上,相当于跳过并删除了fcf0c4a提交。
注意事项
上述操作会改写feature/orphans分支的提交历史,如果你已经将该分支推送到过远程仓库,操作完成后需要执行强制推送更新远程分支:
git push --force-with-lease origin feature/orphans
推荐使用--force-with-lease而非--force,可以避免意外覆盖其他协作者推送到远程的新提交。
内容的提问来源于stack exchange,提问作者aspirinemaga
相关产品推荐
相关产品推荐

