Git删除特定提交

时间:2014-02-20 05:58:50

标签: git revert

假设我已提交1,2,3,4,5。提交2和5是我的,其余的由其他人完成。因为3,4提交有一些错误! 我推动了提交。 commit 5是我想在提交2上应用的更改。

我想回滚到提交2并应用我的新更改提交5。

我应该如何单独删除特定的提交3和4?

2 个答案:

答案 0 :(得分:1)

做一个改变:

git rebase -i HEAD~5

这将打开一个编辑器窗口;只需删除与提交3和4对应的pick行。退出编辑器:rebase将继续。

注意:危险和冲突的根源;如果rebase因某种原因失败,请修复(手动;查看git rebase联机帮助页)或使用git rebase --abort中止)

完成rebase后,使用-f选项进行推送。但是在这个回购中与你合作的人不会感谢你!

答案 1 :(得分:-1)

这是另一种方法,只是为了变化。

理想情况下,您应该在5之上创建新的提交,这将在提交3和4中恢复代码。

如果你没有推动这些提交,你也可以做一个挑选。说你的repo的HEAD指向5,它是分支主。

1 -> 2 -> 3 -> 4-> 5 (HEAD, master)


git co -b temp

1 -> 2 -> 3 -> 4 -> 5 (HEAD, master, temp)


git co master
git reset --hard HEAD~3

1 -> 2 (HEAD, master)-> 3 -> 4 -> 5 (temp)


git cherry-pick temp

1 -> 2 -> 3 -> 4 -> 5 (temp)
     |
     -> 5' (HEAD, master)


git branch -D temp

1 -> 2 -> 5' (master, HEAD)


我认为这就是你想要的。虽然您最好在5之上创建还原提交。

注意:@fge给出的方法更简洁,如果你以前做过交互式rebase,那就更好了。如果没有,这个将给你一个战斗的机会,因为你总是可以将主合并回到临时并且到达你开始的地方。