2016-08-17 163 views
0

我的存儲庫中有一個文件,我不小心重置爲git reset --hard。該文件仍在存儲庫中,但由於沒有提交更改,我無法實現。Git:撤消未提交的更改以重置特定文件

我發現了一些相關的問題:

但是這些我剛剛發現只有一些老丟失的東西,但不是這個最近。有沒有類似grep這種特定文件的歷史記錄?

編輯:有什麼可以幫助的是,我知道丟失的文件的內容。也許如果我可以grep晃來晃去的斑點/提交此內容?

+0

您使用的是IDE嗎?如果是,請檢查本地歷史記錄,或嘗試撤消。 –

+0

不幸的是,這是在遠程主機上。 –

+0

您在重置之前是否有'git .add'?如果沒有,我不認爲有辦法恢復 –

回答

0

Git在其數據庫中存儲對象。您可以通過執行以下操作找到該文件:

find .git/objects/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort 

您應該按日期獲取對象列表。每個條目都以一個sha結尾。每次取沙(即d670460b4b4aece5915caf5c68d12f560a9fe3e4),然後輸入:

git show <the sha> 

您可能必須找到正確的文件之前嘗試幾種。

我的回答是從https://stackoverflow.com/a/7376959/4374801

0

派生你可以做

git fsck --full --cache --dangling 

,尋找dangling blob條目 - 他們中的一個應該是你丟失的文件。

你可以嘗試給grep(在這裏我們選擇一個更大的集未被引用的對象,只是要確定):

git fsck --unreachable --no-reflogs --full 2>/dev/null | awk '$2 == "blob" {print $3}' | xargs git grep -a your-search-string 

這將打印發現斑點的SHA-1與匹配線一起。

一旦你有散列,使用git show <hash>來查看文件。