2011-03-18 83 views
30

我已經對存儲庫進行了一系列更改,並且他們被其他人(他們在Windows上編譯,但不在Linux上編譯)恢復。我認爲這些變化仍在歷史中,但我怎樣才能重新獲得這些變化,修復它們,然後重新提交?我該如何修復恢復的git commit?

回答

52

您是否嘗試恢復恢復?

他們恢復使用

git revert <your commit id> 

的復歸本身就是一個承諾,有其自身提交ID你的提交。所以現在你需要做

git revert <the commit id of his revert-commit> 
+0

繼續......我需要知道魔術詞,而不僅僅是理論。 – mmr 2011-03-18 16:07:16

+0

對不起,評論的東西對我來說是新的。我將編輯我的帖子。 – 2011-03-18 16:07:37

+0

如果您在查找ID時遇到問題,請向我顯示提交日誌。 – 2011-03-18 16:09:49

19

你可以嘗試使用git revert恢復恢復。您還可以使用git checkout從提交中恢復文件。或者,您可以使用git cherry-pick -n重新應用並更改它們。您可以使用git branch從您的提交中創建一個新分支。可能性(幾乎)是無止境的。 :)

+3

+1:'git cherry-pick --no-commit'是一個不錯的選擇,尤其是因爲您可以重複執行以進一步完成更改 – 2011-03-18 16:52:59

2

其他答案在這裏解決如何恢復或櫻桃挑選您的提交,但它聽起來像問題,如果你還需要知道如何找到你的提交,所以這裏有一些指導。

如果您只是運行git log,您應該從最近一次開始查看當前分支歷史記錄中的提交列表。每個提交具有技術上稱爲對象名稱標識符(或「上提交的SHA1SUM」),看起來像這樣:

commit d2d434beeb03e4ee648ca7ca2a1ea1ed09077306 

...其次是作者姓名,日期和那名更改的摘要由該提交引入。當你爲git revertgit cherry-pick指定對象名稱,你可以給它d2d434beeb03e4ee648ca7ca2a1ea1ed09077306或只是足夠的字符從對象名稱的開頭是明確的(如d2d434bee

git log許多選項,可以幫助您跟蹤下載您的提交,如--before-S等,但在這種情況下,您可能特別需要--author=MyLastName

一個圖形化的git工具,可以很好地向您展示歷史記錄,並且可以在每個平臺上使用,是gitk --all。如果您點擊您想要恢復的提交,則可以在窗口中間的「SHA1 ID」字段中複製並粘貼其對象名稱。