Git: особенности удаления и перемещения файлов
Казалось бы, когда мы работаем с репозиторием, то работаем просто с файловой системой и обычными файлами. На самом деле, когда вы выполняете любую команду в Git, он отслеживает все изменения и фиксирует их исходя из того, что они фактически делаются в рабочей копии репозитория.
Говоря по-простому, Git не "висит" в фоне и не следит за изменениями, но при любом запуске (git status, git log и т.п.) первым делом обрабатывает любые обнаруженные изменения.
Небольшой пример: если вы создадите файл в рабочей копии репозитория, отредактируете, но после этого удалите его (заметьте, что между событиями создания и удаления не должно быть ни одного запуска Git), то выполнив git status вы не обнаружете никаких сведений об этом файле.
Таким образом, нужно хорошо себе представлять, как правильно удалять и перемещать файлы проекта.
Удаление файлов
Если вы только что создали файл и удалили его не добавляя в индекс, то нет проблем - Git никак на это не отреагирует. Нет, конечно, он может "увидеть" файл, когда вы его создали, но если вы его удалили не добавляя при этом в индекс, то он без проблем "забудет" удаленный файл.
А вот если вы создали файл, добавили его в индекс, а потом удалили его и выполнили commit, то такой файл попадет в историю, т.к. добавление файла в индекс вызывает создание нового объекта репозитория, который, правда, пока что находится в индексе.
Правильным будет несколько иной подход. Если вы добавили файл в индекс, а потом решили, что его там быть не должно - нужно удалить файл при помощи команды:
Будьте внимательны! В этом случае файлы будут также удалены с диска! А чтобы убрать файл только лишь из индекса, выполните
git restore --staged FILENAME.
Перемещение файлов
Что-то похожее происходит и при переименовании/перемещении файлов. Если вы переименуете файл без добавления его в индекс, то проблем никаких не будет, как и в аналогичном случае с удалением.
Если вы переименуете файл, уже добавленный в индекс, Git будет "думать", что вы удалили файл и создали новый. В этом случае вам будет нужно удалить файл из индекса (см. выше) вручную.
Чтобы не делать лишних движений, вы можете для добавленного в индекс файла выполнить:
В этом случае файл будет переименован и в индексе, и в рабочей копии. Таким образом, вместо нескольких действий, можно выполнить одно.