假设我已提交1,2,3,4,5。提交2和5是我的,其余的由其他人完成。因为3,4提交有一些错误! 我推动了提交。 commit 5是我想在提交2上应用的更改。
我想回滚到提交2并应用我的新更改提交5。
我应该如何单独删除特定的提交3和4?
答案 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,那就更好了。如果没有,这个将给你一个战斗的机会,因为你总是可以将主合并回到临时并且到达你开始的地方。