2016-03-08 75 views
0

我用命令git checkout 1234567來查看舊提交。 直接後來我檢查了另一個提交git checkout 1234568然後我再次檢查主人git checkout master。但現在我的網站是舊版本。命令git checkout刪除了一些提交

我執行git log --oneline後,我意識到我的兩個最新的提交已經丟失了!爲什麼會發生這種情況,是否有可能恢復它們?

這是因爲我必須在每次結賬前再次掌握結賬以完成另一次提交?

+0

您是否在'master'上進行了這兩個提交,或者您檢出了其他提交之一? –

+0

如果您嘗試再次結帳,會發生什麼情況?你失去了他們的哈希? – maazza

+0

檢查git reflog查看你實際簽出的提交內容 – Martin

回答

4

在Git中,nothing is lost只要你承諾。

可以使用reflog說得到提交的雜誌master已通過時間指向:

git reflog master 

一旦你所在的你丟失的最新的一個承諾reflog中,通過使用git reset可以使master再次指向它。

例如,假設最近丟失的提交位於reflog中的第4條條目處。爲了在恢復它master你會說:

git checkout master 
git reset --hard [email protected]{4} 

其中[email protected]{4}指觸犯該master從它現在是指向4項前。

,注意清除master之前,你應該確保你的工作目錄是乾淨,那是你沒有任何未提交變化。


好啦,幾乎什麼。如果足夠的時間過去了,無法訪問的提交將會被刪除,最終將被刪除。默認情況下,它們將保持30天左右,但您可以通過gc.reflogExpireUnreachable選項更改該限制。

+0

我剛剛執行'git checkout master',但我的兩個最新的提交沒有出現,看起來他們真的失去了。 – Black

+0

你在reflog中看過嗎? –

+0

如果我執行'git reflog',然後我再次看到我的最新提交和他們的SHA ID,但我不知道如何我可以再次恢復最新的提交。 – Black