2009-07-28 36 views
3

質問は質問"How to restore Git after fatal file system error?"に関連していますが、1つのファイルについてです。Gitからファイルを復元するには?

私は、ファイル必要な最後の状態2009-07-27午前23時58分に取得する必要があります:私は、クラッシュ後のファイルを復元するにはどうすればよい

/Users/henri/BAckup/6-relationdiagram/Normalized_perhaps_DB/simple_schema0.tcuml 

を?

追加:ファイルはどこにありますか?彼らは何をすべきか?

グラハムの先端

$git checkout 63c6844fded9cfcdee14c9330be82557046b3e56 HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 

ウィリアムの先端

git checkout bee6763b55cf8259438aa575cedbb09d1d02b96a HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 
+0

回答の入力ミスが修正されました。 --since = '...'( '='を追加) –

答えて

2

gitローカルのファイルやディレクトリを削除することがあり、そのファイルだけを復元したいことがあります。私は次のコマンドを実行します:

git checkout -- filenameOrDirectory 

間のスペースに注意してください。

+0

と - を付けないと、ファイル/ディレクトリは最後のコミットから復元されます。 –

+1

はい、ローカルリポジトリから取得しています。たとえば、最近git pullを実行してから特定のファイルを変更した場合、git pullを最後に実行した時点に復元することを決めた場合、このコマンドを使用できます。私はそれが非常に便利だと思う。それは本当にあなたのローカルレポ状態である最後のgit pull状態にファイルを復元します。あなたはそれを試すことができます。任意のファイルやディレクトリを削除してから実行してください。復元する必要があります。 – j2emanue

4

あなたはそれがあなたのリポジトリにあるコミットのうち、1つのファイルを取得する必要がある場合は、gitのチェックアウトは、それを行いますあなたのために。具体的に:

git checkout <sha> <filename> 

は、現在の作業コピーにコミット< SHAからファイル<ファイル名>>を取得します。任意のコミットへの参照である可能性がありますので、分岐名、タグ名、HEAD ^^^^など、あなたが望むようなものを使用することができます。

+0

「コミットIDではなく、そのコミットのログメッセージは1つのクラス図だけではありません」です。コミットを参照するには、コミットのためのSHA1 IDなど、何らかの方法でコミットを参照する必要があります。 gitログはあなたにそれを与えることができるはずです。 – Graham

+0

どこでコマンドを実行すればよいですか?私はエラーを更新しました。 –

+1

gitディレクトリのトップレベルに変更してください。 'git ls-tree -r --name-only master'を実行して、回復したいファイルが 'master'にあるかどうかをチェックします(含まれているスクリーンショットは2009年7月27日23:58のようです)。 'git checkout master-'を実行します。ここで ''はgit-ls-treeの出力に表示されます –

1

リポジトリどこに?その場合は、そこから作業ディレクトリに移動し、ファイルをチェックアウトします。あなたは行うことができます。

 
git log --since='2009-07-27 23:58' --pretty=oneline -n 1 

をしたいハッシュを取得し、経由でファイルを取得するには:

 
git checkout <file> <hash> 

リポジトリの無破損していない作業コピーを持っていない場合は、あなたが「Gitのfsckは」試してみてください、ファイルが失われた場合、成功のチャンスは小さいかゼロです。

+0

あなたのコマンドのエラーを質問に追加しました。 –

関連する問題