2010-05-24 201 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