2017-01-19 36 views
1

我有一個很大的問題。昨天我誤將開發和生產終端並排開了,跑恢復添加到git中的文件,沒有提交,然後被git reset意外刪除--hard

git add . 

生產上。這導致在公共/上傳路徑中登臺所有文件。當我嘗試

git status 

它顯示公共/上傳中的所有文件已準備好提交。但是我從未承諾過這些改變,因爲在製作過程中我不需要任何提交或推送。生產上的SSH密鑰沒有推送權限,只能克隆/拉取。

於是我就這些命令來強制從遠程倉庫

git fetch --all 
git reset --hard origin/master 
git pull origin master 

拉我的新代碼,但現在我發現,它已經刪除了所有的文件在公共/上傳路徑和目錄它的自我。當我檢查

git status 

我看到「你的分支是最新的'origin/master'」。有沒有辦法如何從已刪除的目錄中恢復文件?這些文件是非常重要的......

+0

所有你所要做的就是仔細閱讀'混帳status'的輸出。它顯示瞭如何在暫存文件列表之前暫存文件:*「use'」git reset HEAD ...「'to unstage」* – axiac

+0

獲取文件內容足夠嗎?這很容易恢復,但你必須自己提供相應的文件名 – Vampire

+0

可能的重複[恢復添加到索引,但隨後通過git重置刪除的文件](http://stackoverflow.com/questions/10782978/ recover-files-that-were-added-to-the-index-but-then-removed-by-a-git-reset) –

回答

1

據我所知,git添加註冊其參數文件存儲庫甚至提交之前。如果他們沒有犯下,那麼他們將在稍後收集垃圾。因此,如果您立即採取行動,應該有一種從存儲庫恢復文件的方法。

嘗試在版本庫目錄的根目錄下運行以下bash腳本。它將創建一個新的子目錄recovering_lost_files,其中將包含比HEAD提交更新的git對象(因此對應於git add -ed但未提交的文件)。不幸的是,這些文件的名稱將不會自動恢復。

recover_lost_files

#!/usr/bin/env bash 

headcommit="$(git log --format=format:%H)" 
headcommitobject=".git/objects/${headcommit:0:2}/${headcommit:2}" 
mkdir recovering_lost_files 
find .git/objects/ -type f -newer "$headcommitobject"|while read -r path 
do 
    obj="${path#.git/objects/}" 
    obj="${obj/\/}" 
    git cat-file -p $obj > recovering_lost_files/$obj 
done 
+0

謝謝!這似乎工作,一些文件出現在recovering_lost_files。 –

相關問題