2017-03-15 78 views
0

我不小心刪除了一個工作樹,但是沒有提交更改! 但git worktree list仍顯示worktree(即,它還未被修剪)如何從已刪除的git工作樹中恢復分階段更改?

說,

/home/me/worktreeexample   0d4f25f [fix/something] 
/home/me/       0fd8c7e [master] 

但因爲我只是跑rm -rf worktreeexample/裏面空空如也 $ LS worktreeexample/

回答

1

創建worktreeexample中的新文件告訴git在哪裏尋找。格式基於.git/worktrees的內容。

所以,上面的例子中,這將工作:

echo "gitdir: /home/me/.git/worktrees/worktreeexample" > worktreeexample/.git 

然後運行git statusworktreeexample/將顯示所有被刪除的文件,並希望也是你工作正在進行中被提交。運行

cd worktreeexample 
git checkout -- . 

這將只留下階段性變化。

注意如果你有不分階段變化和摧毀你的工作目錄,你的運氣了。

+2

是的,幸運的是,額外工作樹的索引存儲在「main」git存儲庫的'.git'目錄中,而不是附加的工作樹中,因此您可以從該(仍存在的)索引中恢復所有內容文件。如果你已經吹走了索引文件,那麼你不會很失敗:你可以運行'git fsck --lost-found'並查看所有恢復的文件。這些文件的*名稱將會丟失(用blob散列ID代替),並且整理這些亂七八糟的東西可能會很痛苦。正如你注意到的那樣,* unstaged *的變化已經消失了(除非你的操作系統做了備份/快照,例如MacOS Time Machine)。 – torek