[英]git: remove 2nd commit
我正在尝试删除第二次提交到回购。 在这一点上,我可以吹掉.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将被中止”
要删除最顶层的提交,请使用git reset --hard HEAD~
。 不需要Rebase,因为您没有在其他提交之间删除任何内容。
这已经回答了(上面),但请注意,在较新的git中,有一个noop
命令可以放入文件中。 所以你可以用noop
替换pick
线:
$ 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
技巧就很方便了。
为什么不还原你的提交?
git revert 535dce28f1c68e8af9d22bc653aca426fb7825d8
或git revert HEAD~1
您还可以执行以下操作:
git rebase -i --root
这将包括您的rebase中的root提交。 如果您愿意,您可以选择完全fixup
, squash
或删除第二次提交。
如果是最后一次提交,那么你可以这样做:
git reset --hard HEAD~
如果它不是最后一次提交,你将在rebase列表中至少进行另一次提交,你可以删除第二次提交。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.