0

git undo新しいファイル、変更されたファイル、削除されたファイルなど、作業ディレクトリ内のすべてを元に戻すgit エイリアス ( ) があります。

!git reset --hard && git ls-files -d | xargs -0 git rm --ignore-unmatch && git clean -fq

OS Xでは、これはうまく機能します。ただし、Linux では、次の問題が発生します。リポジトリからファイルが削除されていない場合、git ls-files -d | xargs -0 git rm --ignore-unmatchコマンドは失敗します (xargs何も渡されません)。

xargsから何も受信しない場合、静かに移動する方法はありgit ls-filesますか?

4

4 に答える 4

3

git reset --hardその前に a を使用すると、 は出力を生成しませgit ls-files -dん (生成した場合は、 を使用git ls-files -d -zして NUL で終了する出力を生成する必要がありますxargs -0)。

完了するgit reset --hardと、作業ツリーの追跡された部分とインデックス全体が HEAD コミットと一致します。git ls-files -dインデックスにはあるが作業ツリーにはないファイルのみを表示します。ワーキング ツリーにはインデックスに含まれるものがすべて含まれるため、ハード リセット後にファイルが削除されることはありません。

このgit cleanビットは、追跡されていないファイルを削除するのに役立ちますが (これgit reset --hardは触れません)、git clean -dfq完全に追跡されていないディレクトリも削除するように変更することをお勧めします)。

于 2010-05-05T21:18:17.503 に答える
2

マニュアルページから:

--no-run-if-empty, -r
標準入力に非ブランクが含まれていない場合
、コマンドを実行しません。通常、コマンドは
入力がなくても 1 回実行されます。このオプションは GNU 拡張です。

xargs のバージョンにそのオプションがあることを確認してください ( man xargs)

于 2010-05-05T20:47:32.153 に答える
0

xargsの「-r」オプションを使用したい場合があります。

xargs -r -0 git rm --ignore-unmatch

そうすれば、ls-files何も表示されない場合、xargsはまったく呼び出しませんgit rm

于 2010-05-05T20:58:30.503 に答える
0

「git clean」があります (man git-clean): 作業ツリーから追跡されていないファイルを削除します

于 2011-09-27T09:17:09.487 に答える