Ответ 1
Индекс не содержит ничего, он содержит все, что вы собираетесь совершить, включая файлы, которые уже являются частью репо. Скажем, что вы запускаете следующие команды:
touch a.txt b.txt
git add a.txt b.txt
git commit
git rm --cached a.txt
git commit
При первом запуске git add
он добавляет в индекс a.txt
и b.txt
. Затем git commit
принимает все, что находится в индексе, и фиксирует его.
Индекс все еще содержит a.txt
и b.txt
.
Когда вы git rm --cached
, он удаляет a.txt
из индекса, но b.txt
все еще находится в индексе. Затем git commit
принимает все, что находится в индексе (только b.txt
), и фиксирует его. Файл a.txt
все еще существует, потому что git rm --cached
не касается фактического файла, а также git commit
.
Поскольку первая фиксация содержит a.txt
, а вторая фиксация не выполняется, это отображается как удаление.
Главное, что git status
делает, показывает вам разницу между индексом и фактическими файлами на диске. Поэтому, если git status
пуст, то все не проигнорированные файлы на диске также находятся в индексе.