git rm и git mv --- Управление файлами
Когда файлы отслеживаются Git, простое удаление или переименование их в файловой системе не обновляет репозиторий полностью. Git предоставляет команды git rm и git mv для корректного выполнения этих операций.
Удаление файлов с помощью git rm
Команда git rm удаляет файл одновременно из рабочей директории и области индексации за один шаг:
git rm old-notes.txt
После этого git status покажет удаление как проиндексированное и готовое к коммиту.
git rm vs простое удаление
Если вы удалите файл с помощью rm (или файлового менеджера), Git заметит его отсутствие, но не проиндексирует удаление:
rm old-notes.txt # файл удалён, но Git видит это как непроиндексированное изменение
git add old-notes.txt # теперь вам нужно вручную проиндексировать удаление
Использование git rm объединяет оба шага. Оно удаляет файл и индексирует удаление.
Снятие с отслеживания без удаления
Иногда вы хотите, чтобы Git перестал отслеживать файл, но оставил его на диске --- например, конфигурационный файл, который вы случайно закоммитили:
git rm --cached secrets.env
Файл остаётся в вашей рабочей директории, но Git индексирует его удаление из репозитория. После коммита файл станет неотслеживаемым. Добавьте запись в .gitignore, чтобы предотвратить его повторное добавление.
Перемещение и переименование с помощью git mv
Команда git mv переименовывает или перемещает файл и индексирует изменение:
git mv old-name.txt new-name.txt
git mv utils.js lib/utils.js
Под капотом git mv эквивалентна:
mv old-name.txt new-name.txt
git rm old-name.txt
git add new-name.txt
Git автоматически обнаруживает переименование --- вы увидите пометку "renamed" в git status.
Попробуйте!
- Создайте два файла и зафиксируйте их:
echo "alpha" > alpha.txt && echo "beta" > beta.txtgit add alpha.txt beta.txt && git commit -m "Add alpha and beta"
- Удалите один с помощью
git rm:git rm alpha.txt- Выполните
git status--- удаление уже проиндексировано
- Переименуйте другой с помощью
git mv:git mv beta.txt gamma.txt- Выполните
git status--- отображается "renamed: beta.txt -> gamma.txt"
- Зафиксируйте результат:
git commit -m "Remove alpha, rename beta to gamma"
Частая ошибка
Забыли --cached при снятии с отслеживания --- Запуск git rm secrets.env без --cached удалит файл с диска. Если вы хотите только снять с отслеживания, всегда используйте --cached.