2011-09-14 18 views
7

私は何百ものファイルを含むディレクトリがあると言います。私はそれらのいくつかを変更しますが、その後は変更が悪いことに気付きます。私がしている場合:git checkoutで修正されたファイルのみを復元するにはどうしたらいいですか?

git checkout whole_folder 

その後、すべてが再びチェックアウトされ、すべてを再コンパイルする必要があります。チェックアウトが変更されたファイルのみに影響を与える方法はありますか、またはそれぞれのファイルに別々にcheckoutを実行する必要がありますか?

+0

あなたは 'gitのチェックアウトを行う場合 - '(Gitチェックアウト 'の少しより安全なバージョンwhole_folder')タイムスタンプが残りますそのコマンドで変更されていないファイルと同じです。つまり、ビルドプロセスは、mtimesに基づいて最小限必要と考えるファイルを再構築するだけです。 –

+0

gitがすべてをチェックアウトしてもよろしいですか? IIRC gitは、git checkout - whole_folder、またはgit reset -hard HEADを実行したときに、修正されたファイルだけをチェックアウトし、他のものに触れることは本当に困難です。 – holygeek

+0

だから、 'git checkout-whole_folder'を行うべきですか? – Geo

答えて

13

はこれを試してみてください:

$ git checkout `git ls-files -m` 

のみ変更されたファイルを一覧表示します-m。何をやっている

+0

クロスプラットフォームソリューションはありませんか?私は時々、標準の 'cmd.exe'シェルからWindowsを使用しています。 – Geo

2

は正しいですが、あなたはちょうどあなたが支店名と同じだディレクトリ名を持っている場合、すなわちで曖昧さをなくす--を追加する必要があります

git checkout -- whole_folder 

gitがのみ更新します依存関係ベースのビルドツールでmtimesが正しく使用されている場合は、ファイルの最小安全数を再構築する必要があります。異なる動作が見られる場合、それはバグでしょう。

2

しかし

git checkout -- $(git ls-files -m) 

も削除されたファイルをchecksout。あなただけ変更されたファイルをチェックアウトしたい場合は

私にとってはこの作品:

git checkout -- $(git status -uno | grep --colour=never '#' | awk '{ print $2 $3 }' | grep --colour=never ^modified: | cut -c10-) 
+0

ありがとう@TheFox。それはほとんど働いた。それは私のために働くようにビットについてのコマンドを修正する必要がありました。これは私が使った行です: '' 'git checkout - $(git status | grep modified:| cut -c14-)' '' – user1029978

関連する問題