ドキュメントによるとgit rm
、これはどのように動作するかです:
インデックスから、または作業ツリーとインデックスからファイルを削除します
コミットしたばかりでインデックスが空の場合、実行するgit rm some_file
と の削除がステージングされますsome_file
。rm
私は何もしないことを期待します。存在しないファイルを削除するのはなぜですか? また、リポジトリへの最終的な影響は何ですか?
ここでの秘訣は、コミット後にインデックスが空にならないことです。
実際、コミット前とコミット中の内容が正確に含まれています。
この概念がどこから来たのかはわかりません。確かに、この時点ではインデックスが空であるように見えますが、誤解を招くのはフラグの綴りです: 空の commit ではなく、空のgit commit
diffが許可されます。--allow-empty
git add
インデックスに新しいものを追加することも事実ですが、既に存在するファイルの場合、追加される新しいものは、既に存在する古いエントリを置き換えるだけです。(おそらく、git add
コミット後にインデックスが空であると人々が想定するのは、のつづりです?)
(もう 1 つの少し独特な点は、git rm
何かを追加することです。具体的には、「コミットに存在するこのパス名はHEAD
、次のコミットには存在してはならない」というレコードです。これは、インデックスが二重の役割を果たすためです。 : 「次のコミットに何を入れるか」だけでなく、作業ツリーの git スキャンを高速化するためのキャッシュでもあります.実際には、インデックス ファイルを完全に削除できます。これにより、すべてがデステージされますが、何もスケジュールされません削除の場合:HEAD
この場合、git はコミットからインデックスを再構築するだけです。)