我有強迫VM關閉後這個混帳消息,這顯然破壞git的指數混帳:無法讀取對象...無效參數
Git: Failed to read object abcdef.... Invalid argument
我看着這些現有的答案
Restore a corrupted index
Recover damaged git by HD failure
無似乎工作。
我有強迫VM關閉後這個混帳消息,這顯然破壞git的指數混帳:無法讀取對象...無效參數
Git: Failed to read object abcdef.... Invalid argument
我看着這些現有的答案
Restore a corrupted index
Recover damaged git by HD failure
無似乎工作。
讓我們進入,並設法解決它。只有當git reflog
也不起作用時才使用這種方法,因爲很顯然,您的索引已損壞,並且reflog無法從已損壞的索引中讀取。
打開.git/
文件夾
看看所謂HEAD
文件。
這有你的git當前所在分支的名稱。
現在尋找一個名爲ORIG_HEAD
文件。
這個probably
擁有git能夠註冊的最後一次良好提交的SHA。如果是的話,瞧!
複製它(比如X),在終端做:
git show X > interim.patch
這會複製上次成功轉變爲一個標準的差異。
而且這個SHA(X)複製到HEAD
文件的內容。
這告訴git將此更改視爲當前位置,它可以與之共存,因爲它已經記錄了一段時間。
現在如果你做一個git branch
,你會搬到(no branch)
。
所以,現在你有你的變化。做git checkout -f <branch-name>
這將覆蓋您的更改與遠程內容,但你仍然有他們在該補丁。
所以現在,你是
做一個git apply interim.patch
其中,如果通過順利的話,意味着你有你的變化。
然後繼續正常的git步驟。
git add .
git commit -am 'Message'
而且你又回到了正常的和平生活。
克隆到另一個目錄的項目。有調查你是否有原始的所有裁判。
這個想法是解決現有的損壞提交。所以它不會丟失 – Arindam 2012-08-11 06:15:33
-1:如果這是一個大型項目呢?這顯然不是解決方案。 – 2013-08-29 20:00:30
使用@阿瑞丹姆的回答上面,我沒有工作,但它的變化做了,我希望別人發現它有用:
此時你在GIT無人過問是。您無法檢出具有當前分支狀態的新分支,可能是因爲reflog已損壞。
繼續之前:
在我的情況,我知道大致的時候誰是變化的文件,我已經「丟失」上次編輯 - 大約2小時前 - 所以運行以下取我的所有項目被edtited我最後的成功之間的文件提交和現在:
$> cd my/project/dir
$> find . -type f -mmin -240 -exec grep -l "$1" {} \; | xargs ls -l
將這些文件複製在其他地方手動(例如到/ tmp目錄/備份)或通過擴展命令來手動完成(我有大約一打,所以通過手沒有這樣一個苦差事)
編輯的.git/ORIG_HEAD,做同樣的
$> git的分支
GIT應該告訴你 「(無分支)」
$> git log
GIT應該給你你上面
提到的SHA1日誌消息現在創建一個新的分支:
$> git checkout -b my_new_branch
現在將所有文件從/ tmp/backup複製到正確的位置並運行:
$> git commit -a -m "Some commit"
你完成了。您現在應該位於名爲「my_new_branch」的新分支中,所有文件都在最後一次成功提交和現在提交併且安全的 之間修改。
現在把這個東西打成一團,然後把它放回原處!
'git reset HEAD'有幫助嗎? – 2013-08-29 20:05:11