0

ドキュメントによるとgit rm、これはどのように動作するかです:

インデックスから、または作業ツリーとインデックスからファイルを削除します

コミットしたばかりでインデックスが空の場合、実行するgit rm some_fileと の削除がステージングされますsome_filerm私は何もしないことを期待します。存在しないファイルを削除するのはなぜですか? また、リポジトリへの最終的な影響は何ですか?

4

1 に答える 1

2

ここでの秘訣は、コミット後にインデックス空にならないことです。

実際、コミット前とコミット中の内容が正確に含まれています。

この概念がどこから来たのかはわかりません。確かに、この時点ではインデックスが空であるように見えますが、誤解を招くのはフラグの綴りです: 空の commit ではなく、空のgit commitdiff許可れます。--allow-empty

git addインデックスに新しいものを追加することも事実ですが、既に存在するファイルの場合、追加される新しいものは、既に存在する古いエントリを置き換えるだけです。(おそらく、git addコミット後にインデックスが空であると人々が想定するのは、のつづりです?)

(もう 1 つの少し独特な点は、git rm何かを追加することです。具体的には、「コミットに存在するこのパス名はHEAD、次のコミットには存在してはならない」というレコードです。これは、インデックスが二重の役割を果たすためです。 : 「次のコミットに何を入れるか」だけでなく、作業ツリーの git スキャンを高速化するためのキャッシュでもあります.実際には、インデックス ファイルを完全に削除できます。これにより、すべてがデステージされますが、何もスケジュールされません削除の場合:HEADこの場合、git はコミットからインデックスを再構築するだけです。)

于 2015-12-08T23:24:42.660 に答える