2010-05-24 159 views
13

我在两个分支之间合并了错误的方法。然后我跑了以下内容:Git撤消上次提交

git reset --hard HEAD^ 

我现在回到了以前的承诺(这是我想成为)。那是正确的吗?

糟糕的提交仍然在存储库中,是好的还是应该做别的从存储库中删除它?

我还没有推或承诺任何其他事情。

+0

对于后代,您可能需要更正您的命令。它是'git reset ...',而不是'git commit ...'。 – 2010-05-24 20:42:12

+0

哎呀,谢谢你指出。 – Justin 2010-05-24 20:58:00

回答

15

这是正确的做法。

你可以做一个git gc垃圾收集断开的提交,但没有必要。

+6

那么,'git gc'去掉那个提交需要90天。提交可从reflog计数到达,并且reflog需要90天才会到期(默认情况下)。但答案的要点是正确的:git正在寻找你,尽量不要永久删除任何东西,以防万一。 – Cascabel 2010-05-24 14:34:22

+0

感谢James和Jefromi。 – Justin 2010-05-24 14:38:05

+0

@Jefromi:钉上它。我尝试不向人们推荐'gc',因为它是git中唯一的不可逆操作。 – 2010-05-24 14:46:31

0

MMMM ... git revert可能是你所需要的

而且this文章可以帮助你。

+0

谢谢,但是我不想生成反向提交。 – Justin 2010-05-24 14:32:14

1

使用^HEAD^不适合我。相反,我不得不使用从参考:http://gitref.org/basic/#commit

git的复位--soft HEAD〜

git version 1.7.12.4 (Apple Git-37)

(注:如果您使用zsh(像我一样),你也可以跳过^字符而不是上面给出的替代命令)

+2

你使用zsh吗?如果你是你需要逃脱^ – Justin 2013-07-16 21:00:58

+0

谢谢:我是。多么奇怪的警告 – electblake 2013-07-18 19:11:33