2012-09-05 171 views
2

我在(不分支)分支做了一個提交,然後做了一個拉,意識到我在錯誤的分支上做了一個'結帳主'和另一個拉。我現在無法找到我原來的提交推入主分支,我不能切換到(不分支)。有沒有辦法來恢復我的提交或得到差異?恢復(沒有分支)git提交

+2

也許 - 是否'git reflog'顯示提交 - 你可能會把它拉到一個真正的分支? –

+1

@AdrianCornish這很可能是正確答案:請在下面張貼它的投票。 –

+0

@AlexBrown Done –

回答

5

git reflog會列出您所做的所有提交,並且(例如)git merge [email protected]{1}會將其合併回您的分支。

$ git reflog 
734713b... [email protected]{0}: commit: fixed refs handling, added gc auto, updated 
d921970... [email protected]{1}: merge phedders/rdocs: Merge made by recursive. 
1c002dd... [email protected]{2}: commit: added some blame and merge stuff 

git rev-parse

<refname>@{<n>}, e.g. [email protected]{1} 

的Ref後跟後綴@與封閉在一對括號(例如{1}{15})的序規範指定了第n個先前值REF。

請注意,git rebase -i也會這樣做。

Revision Selection頁提到:

重要的是要注意的是,reflog信息是嚴格的地方是很重要的 - 這是一個日誌你已經在你的倉庫做了什麼。
引用在其他人的版本庫中不會相同;並且在您最初克隆存儲庫後,您將擁有一個空的reflog,因爲您的存儲庫中尚未發生任何活動。

配置gc.reflogExpire指定何時刪除比此時更早的reflog條目; 默認爲90天

+0

這通常是正確的,雖然可能會因git reflog配置而失敗。 –

+0

@AlexBrown添加了一條警告。 –

+0

它保留了大量日誌 - 我認爲120天是默認值。 –