2012-08-31 103 views
3

我們已經配置了一個git倉庫,這個倉庫包含更多分支。最近我們遇到了一個問題,我們丟失了一些從存儲庫中的用戶克隆中推出的提交。Git commit id lost

如果我運行「git的日誌的commitid」我能看到提交ID信息,但混帳分支--contains的commitid」不顯示它所屬的分公司。

另外,如果我跑形容它下面的結果,我的fsck所有選項跑,但看起來LIET這些提交不糾纏提交。請分享你的想法,爲什麼這樣的提交人失蹤,不與任何分支連接。

git describe commitid --all 
changes/01/21112/1 

我跑git的引用日誌,但它沒有顯示提交ID,我們實際上是挑選了c ommit從一個提交,現在我可以看到實際的提交id(即使這個提交也不屬於任何提交)和櫻桃挑選的提交id對應於實際提交ID缺失,我無法追蹤櫻桃選擇的提交id

如何找到丟失的櫻桃選擇的提交ID?

+0

等等,我沒有得到您的帖子的第二部分。一旦你選擇了你要提交給分支的提交,當你在分支中運行'git log'時,你應該會看到一個新的提交標識,並且在註釋中有目標標識。會發生什麼?在這種情況下,你在找什麼? – Vince

+0

如果這是一個櫻桃選擇,並且它不在應該接受提交的分支上,爲什麼不再選擇櫻桃呢? – Christopher

+0

嗨Vince,christoper,我正在尋找一個提交id是cherry-pick commit id,現在我無法在裸倉庫中看到櫻桃選擇的提交ID。 「git log commitid」我提到了哪些是我本地克隆中的實際提交ID,但沒有找到我在遠程裸機中提交的櫻桃提交的提交ID,我可以從我的本地提交中挑選出來,但是問題是,我們看到這些櫻桃挑選的提交總是缺失,因此我們希望找到誤導櫻桃挑選的提交標識的原因。 – bsd

回答

5

你試過git reflog

當提交未被引用(例如,git reset)時,它實際上會保留在存儲庫中一段時間​​,甚至git gc也不會收集它。這是因爲它們在reflog中保持引用。

你可以看到,如果這是這樣:

$ git fsck --no-reflogs 

reflog就會在這裏保護你。它允許您回滾災難性的resetrebase或任何其他更改歷史記錄的命令。

如果你想恢復這些丟失的提交,你可以很容易地從reflog中獲得它們。

如果你想刪除它們爲好,你可以使用類似:

$ git reflog expire --all 

但要小心!這可能不會被撤消。

+0

我運行git reflog,但它沒有顯示提交id,實際上我們從一個提交中選擇了提交,現在我可以看到實際的提交(即使這個提交也不屬於任何分支)和櫻桃提交提交id對應於實際提交ID缺失,我無法追蹤櫻桃選擇的提交ID 我如何找到丟失的櫻桃提取的提交ID? 在此先感謝 – bsd