これらのコマンドラインの最初のものが、gitのステージング領域にあるすべてのファイルを作業コピーから無条件に削除したと思います。2つ目は、追跡されたが現在は削除されているすべてのファイルのステージングを解除しました。残念ながら、これはそれらのファイルへのコミットされていない変更が失われることを意味します。
作業コピーとインデックスを最後のコミット時の状態に戻したい場合は、次のコマンドを(慎重に)使用できます。
git reset --hard
git reset --hard
作業コピーとインデックスのコミットされていない変更を消去するので、「慎重に」と言います。ただし、この状況では、最後のコミット時の状態に戻したいだけのように聞こえ、コミットされていない変更はとにかく失われています。
更新:まだコミットを作成していない(HEADを解決できないため)とのAmberの回答に対するコメントから聞こえるので、これは役に立たないと思います。
これらのパイプがどのように機能するかについてはgit ls-files -z
、git diff --name-only --diff-filter=D -z
両方とも、バイトで区切られたファイル名のリストを出力します0
。(改行とは異なり、0
Unixライクなシステムではファイル名にバイトが含まれないことが保証されているため、これは便利です。)プログラムはxargs
基本的に、標準入力からコマンド行を構築します。デフォルトでは、標準入力から行を取得して最後に追加します。コマンドラインの。-0
オプションは区切らによって標準入力を期待すると言う0
バイト。 xargs
コマンドを数回呼び出して、標準入力からすべてのパラメーターを使い果たし、コマンドラインが長くなりすぎないようにします。
簡単な例としてtest.txt
、次の内容のと呼ばれるファイルがあるとします。
hello
goodbye
hello again
...次に、コマンドxargs echo whatever < test.txt
はコマンドを呼び出します。
echo whatever hello goodbye hello again
rm -f
はgitコマンドではなく、--cached
オプションはありません。実行git rm
する前にローカルファイルが削除されたため、正当な理由があるとは思えませんgit rm
。