我已經添加了一個目錄與git add,並意識到它有錯誤的文件,所以我用git reset --hard返回到最新的提交,但我不知道git也會刪除那些添加的文件工作副本。git add + git reset硬刪除的工作副本文件 - undo?
有誰知道我如何解決這個問題?
我已經添加了一個目錄與git add,並意識到它有錯誤的文件,所以我用git reset --hard返回到最新的提交,但我不知道git也會刪除那些添加的文件工作副本。git add + git reset硬刪除的工作副本文件 - undo?
有誰知道我如何解決這個問題?
當你git add
一個文件,它被添加到對象數據庫和索引。正在運行git reset
更新了索引和工作目錄,但它並未從對象數據庫中刪除這些文件。它們仍然是無根的(「懸掛」)對象。您可以運行git文件系統檢查程序git fsck
來查看哪些項目是「懸掛」的。你會看到類似的報告:
% git fsck
dangling blob 1ff0c423042b46cb1d617b81efb715defbe8054d
dangling blob 1bc915c5cb7185a9438de28a7b1a7dfe8c01ee7f
dangling blob a8c86221b400b836010567cc3593db6e96c1a83a
dangling blob 46ff0854663aeb2182b9838c8da68e33ac23bc1e
dangling blob 21a96a98ed84d45866e1de6e266fd3a61a4ae9dc
... etc ...
如果你也碰巧有一個懸空樹,您可能能夠恢復文件名BLOB ID映射。如果你有一些搖晃樹:
dangling tree 57623d711c18d819831f24a9456f0660e9dbe596
然後你就可以通過運行git ls-tree
命令顯示樹內容:
% git ls-tree 57623d711c18d819831f24a9456f0660e9dbe596
100644 blob 21a96a98ed84d45866e1de6e266fd3a61a4ae9dc file1.txt
100644 blob 46ff0854663aeb2182b9838c8da68e33ac23bc1e file2.txt
這表明斑點46ff0854663aeb2182b9838c8da68e33ac23bc1e
最初加入file1.txt
。但是,很可能您沒有將樹添加到對象數據庫中,您需要檢查每個文件以確定要保存的位置。
您可以使用git cat-file
命令獲取blob的內容。例如,將其保存到recovered.bak
:
% git cat-file blob 46ff0854663aeb2182b9838c8da68e33ac23bc1e > recovered.bak
我想'git add'只將文件添加到索引,並且它需要'git commit'來使索引中的文件被添加到對象數據庫中。 –
哇!它工作得很好!非常感謝您的快速和偉大的答案! – user1354743
@WayneConrad將一個blob添加到索引將繼續並將其放入對象數據庫以及索引。這些類型的情況非常方便,因此您可以在修改工作目錄後檢出索引。 –
的可能重複的[撤消GIT中的復位 - 硬](http://stackoverflow.com/questions/7374069/undo-git-reset-hard) –