git:删除第二次提交

时间:2012-03-22 21:12:02

标签: git

我正在尝试删除第二次提交到回购。在这一点上,我可以吹走.git目录并重新做,但我很好奇如何做到这一点......我之前已经删除了提交,但显然从来没有删过第二个:)

> git log

commit c39019e4b08497406c53ceb532f99801793205ca
Author: Me
Date:   Thu Mar 22 14:02:41 2012 -0700

    Initializing registry directories

commit 535dce28f1c68e8af9d22bc653aca426fb7825d8
Author: Me
Date:   Tue Jan 31 21:04:13 2012 -0800

    First Commit

> git rebase -i HEAD~2
fatal: Needed a single revision
invalid upstream HEAD~2

> git rebase -i HEAD~1

我进入编辑器的那一刻:

pick c39019e Initializing registry directories

# Rebase 535dce2..c39019e onto 535dce2
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

现在我的问题是,我不能只是吹掉第二次提交,因为“如果你删除所有东西,那么rebase将被中止”

5 个答案:

答案 0 :(得分:5)

要删除最顶层的提交,请使用git reset --hard HEAD~。不需要Rebase,因为您没有在其他提交之间删除任何内容。

答案 1 :(得分:2)

这已经回答了(上面),但请注意,在较新的git中,可以在文件中放入noop命令。因此,您可以将pick行替换为noop

$ git rebase -i HEAD^
[in editor, change pick line to noop, and write and quit]
".git/rebase-merge/git-rebase-todo" 15L, 492C written
Successfully rebased and updated refs/heads/master.
$ 

不可否认,git reset不会轻易做到这一点......但如果您已经启动了交互式rebase,并且事后只能意识到自己想要的东西,noop技巧很方便。

答案 2 :(得分:1)

为什么不还原你的提交?

git revert 535dce28f1c68e8af9d22bc653aca426fb7825d8 要么 git revert HEAD~1

答案 3 :(得分:0)

如果是最后一次提交,那么你可以这样做:

git reset --hard HEAD~

如果它不是最后一次提交,你将在rebase列表中至少进行另一次提交,你可以删除第二次提交。

答案 4 :(得分:0)

您还可以执行以下操作:

git rebase -i --root

这将包括您的rebase中的root提交。然后,您可以选择fixupsquash,或者根据需要完全删除第二次提交。