2017-03-15 12 views
0

私は誤って作業ツリーを削除しましたが、ステージングされていますがコミットされていない変更がありました。 しかしgit worktree listまだ削除されたgitワークツリーからステージングされた変更をどのように回復できますか?

セイ、

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

(すなわち、それは剪定されていない)worktreeを示ししかし、私はちょうどrm -rf worktreeexample/を走ったので、そこには何も $ 1!worktreeexampleがない/

答えて

1

作成worktreeexampleの新しいファイルgitどこに見えるか。フォーマットは.git/worktreesの内容に基づいています。

ので、上記の例のために、これは動作します:

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

はその後worktreeexample/git statusを実行すると、すべての削除されたファイルが表示されます、そして、できればまた進行中の作業をコミットします。実行

cd worktreeexample 
git checkout -- . 

これは段階的な変更のみを残します。

あなたはunstaged変更を持っていて、作業ディレクトリを破壊した場合、あなたは運外です。

+2

幸いなことに、余分な作業ツリーのインデックスは、追加の作業ツリーではなく、 "メイン" gitリポジトリの '.git'ディレクトリに保存されているので、その(まだ存在する)インデックスファイル。インデックスファイルも吹き飛ばしてしまった場合は、 'git fsck --lost-found'を実行して回復したファイルをすべて見ることができます。ファイルの*名前*は失われ(ブロブのハッシュIDで置き換えられます)、混乱を分類することは苦しいことがあります。 MacOS Time Machineなどのバックアップ/スナップショットをOSが実行している場合を除き、* unstaged *の変更はなくなりました。 – torek

関連する問題