2016-11-07 136 views
3

這一次是要採取專家:恢復壞的git的文件後的復位 - 硬命令

我跑了git initgit add --all和一個新的項目,我的工作對時間太長我才意識到我沒有設置git repot。運行git add後,我意識到我忘了創建一個.gitignore文件。沒有想到我跑了git reset --hard HEAD和OH沒有我的所有文件都沒有了,沒有日誌或reflog,沒有狀態和所有命令導致fatal: bad default revision 'HEAD'。我確信答案是我被搞砸了。似乎無法對任何晃動的斑點做任何事情,等等。希望有些古魯人知道我不知道的東西。

git fsck --full git:master 
notice: HEAD points to an unborn branch (master) 
Checking object directories: 100% (256/256), done. 
notice: No default references 
dangling blob c57eff55ebc0c54973903af5f72bac72762cf4f4 
dangling blob 4740a6ee5099aa087bac317337e28bba78c4b83c 
missing tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 
dangling blob 0d6b3be3e5517a7a7df7df941a6bd3740fcfc5e1 
dangling blob d0437745b1902b1ec7e4154a6c058a900575ae7b 
dangling blob 5223f05f29bed36037a68f1185f0d718f2a5f9b8 
dangling blob d3f186be7e3fcac86aa15c6ebf416f636269f356 
dangling blob 526b432e210b3a943df9a7146a0fb4c3e30fc2f5 
dangling blob 96722f502f9bd93e5205ea07d8c9b56b11f2e9bd 
dangling blob 594eff1d8bfd71561f4f9a0b1447c764e812e2aa 
dangling blob df1b87ad781e0a961648f2c01d37b9fe15e581bd 
dangling blob e196d0eaf4df52ec1d65faf1971e444d37640284 
dangling blob a112aeec073daabfa02ba34b97f14a2bed7ff831 
dangling blob e449375c07fc16d823fda51632ed0ed9894ff0f7 
dangling blob 67d6eb75cb856092664d32c6eb9c10e1e226d61a 
dangling blob abecf6b29f407556dc135523dd68d889d1e5147e 
dangling blob af384fede44e1cf5dd963988a6aedf3161089891 
dangling blob 2f21e52fb10e12a249ee3c99cf386fcf4a3bb08c 
dangling blob f12933a0ea1ff0f052eef393485d59e5400f4d40 
dangling blob 72f3fb0e59445ddf270882b4d323daee85d7fe2b 
dangling blob f5bffa99c3301776fe0634ac7982c15320c46207 
dangling blob fd764a7e888b3e090bdff5604576de1ab28e0ef8 
+0

你得到一個'失蹤樹4b825dc642cb6eb9a060e54bf8d69288fbee4904'有意思的是:這是哈希ID爲空樹(請參閱http://stackoverflow.com/q/9765453/1256452)。 – torek

+0

是啊......很奇怪。我只是將blob轉儲到.txt文件,並手動重新創建了我的文件結構,幸運的是,在給定少量內容的情況下,它很容易。 – Kevin

回答

2

您仍然可以恢復內容!

爲了安全起見,第一,這樣做:

git fsck --lost-found 

這將斑點保存到.git/lost-found/other

隨着git fsck輸出,你現在可以命令,如

git show c57eff55ebc0c54973903af5f72bac72762cf4f4 > filename 

恢復文件。這很容易恢復內容,但不是文件名。

您可以爲所有像一個簡單的命令斑點做到這一點:

for blob in $(git fsck --lost-found | awk '$2 == "blob" { print $3 }'); do git cat-file -p $blob > $blob.txt; done 

這裏更多的細節 - https://medium.com/@CarrieGuss/how-to-recover-from-a-git-hard-reset-b830b5e3f60c#.6grpr3abr

+0

上面的第一個命令是關鍵。只要你一次運行'git fsck --lost-found',你就可以用'cd .git/lost-found/other'來查看那裏的文件。這些文件的*名稱是什麼都沒有了,但是如果你能通過檢查內容來確定哪個文件是你的文件,那麼你就可以。 – torek

+0

這是答案。不過,我應該更清楚:我正在尋找簡單地恢復我的文件結構,等..轉儲這些blob回txt。我手動完成了...並且仔細...呃。 – Kevin

+0

@Kevin - 在這種情況下無法恢復文件結構。樹/文件結構是提交,並且從未完成。 – manojlds