从git中删除不是最后一次提交的提交

时间:2019-11-25 11:34:56

标签: git rebase

假设我们有两个分支,master和local_branch 我在my_branch中有一些提交。我将所有提交都推送到存储库中,并假设我在使用时:

git log --pretty=oneline

这些行将显示给我:

c682f01 (origin/local_branch) add final changes.
1bad4de add some local changes 2.
ef7d35e add some local changes 1.
f719c75 temp commit!
f0dcf28 some local changes.
adc5be1 (origin/master, origin/HEAD, master) Add design decisions.
baf2ec8 Add some feature 1.
edd3e66 initial commit

假设我要从local_branch中删除一个提交(临时提交)。

如何做到这一点而又不破坏其他提交?

哪种方法最好? 我可以按照以下说明进行操作吗:

git rebase -i

2 个答案:

答案 0 :(得分:2)

我将本地分支重置为f0dcf28,cherickpick ef7d35e-c682f01,提交它们,然后强行将它们推到远程。 (许多存储库已设置为您无法强制推送到分支或至少不推送到master分支。在这种情况下,您对于临时提交实际上无能为力)

git reset --hard f0dcf28
git cherry-pick my_branch~2 my_branch
git push -f

(请谨慎使用forcepush-我还没有真正测试过:forcepush会覆盖您的远程分支!)

答案 1 :(得分:2)

您可以执行git rebase -i f0dcf28。您应该在编辑器中打开以下内容:

pick c682f01 (origin/local_branch) add final changes.
pick 1bad4de add some local changes 2.
pick ef7d35e add some local changes 1.
pick f719c75 temp commit!
pick f0dcf28 some local changes.

编辑pick前面的f719c75 temp commit!,并用d代替,即

pick c682f01 (origin/local_branch) add final changes.
pick 1bad4de add some local changes 2.
pick ef7d35e add some local changes 1.
d f719c75 temp commit!
pick f0dcf28 some local changes.

将其保存在编辑器中并退出。现在应该删除您的提交。 执行此操作后,您需要强制推送