2011-10-28 87 views
8

我犯了兩次錯誤。如何恢復兩次提交併只提交好東西?如何恢復兩次提交併只提交好東西?

+0

什麼是好東西?你能否更詳細地描述你的歷史現在看起來如何,你想如何看待? – svick

+0

如果得到正確的答案(好東西?),稍微詳細一點會有所幫助。 – ryanzec

+0

在您提交其他所有內容之前刪除所有不良內容。 –

回答

11

你可以做一個git rebase -i HEAD~2,然後使用該接口放棄自那時起就存在的「壞提交」並清理你的歷史。然而,這改變了項目的歷史,如果你已經推動(和其他人)你的改變,那麼就有一些社會問題需要解決。

其他選項是git revert這些更改。然後將2個新的提交添加到歷史記錄中,這使得您不希望在項目歷史記錄中明確指出這兩個提交。不太乾淨,但更容易處理。

+0

我的同事們會抱怨說,糟糕的承諾曾經在那裏開始。在嘗試合併分支之前最好擺脫它。感謝您提供'git rebase -i'答案,而不只是說「你不是真的想這麼做!」像許多人一樣! –

+0

在這種情況下,另一個有用的命令是'git push --force',以防你已經推送了錯誤提交。 –

+0

'--force'選項具有破壞性。如果其他人對你的提交進行了修改並將它們推送到版本庫,那麼你的強制推進將會破壞所有的提交。 –

10

首先,git reset HEAD~2放棄前兩個提交,同時讓您的工作樹完全按照原樣。然後,只需用你想要的創建一個新的提交(例如,用git add,然後用git commit)。

請參閱Reset Demystified作者:Scott Chacon瞭解經常易混淆的git reset comamnd的詳細信息。

+1

我只會這樣做是隻提交本地,如果他們是公開的我會使用最後2次提交 – ryanzec

+0

是的,我假設OP沒有推動任何地方的不正確提交。 –