git mv
на самом деле ничего не делает без него, потому что у git нет на самом деле понятия "ход" на большинстве уровней. † По большей части ходы представлены в git как пара добавленный файл / удаленный файл, которую git может обнаружить и обрабатывает как ход при отображении различий или обновлении рабочего дерева. [Из твоего вопроса, похоже, ты уже знаешь это, но только для полноты ...]
Одним из следствий этого является то, что вполне нормально использовать обычный не-git mv
(или любой другой инструмент) для перемещения файлов, контролируемых git; результаты не будут отличаться (и это может быть удобно, если, например, вы хотите использовать какой-то специальный инструмент для перемещения).
Однако , как и при любых изменениях в вашем рабочем дереве, git на самом деле не «знает» об этом, пока вы не добавите измененную вещь в индекс с помощью git add
.
Так что git mv A B
- это просто вспомогательная команда, примерно эквивалентная mv A B; git add -u A; git add B
; поскольку вы уже сделали mv
, вы могли бы просто использовать git add
таким же образом, чтобы сообщить git о новых и удаленных файлах. Если проще внести другие изменения в ваше рабочее дерево в индекс, можно просто ввести git add -A
, который добавляет в индекс как новые файлы, так и изменения в рабочем дереве (включая удаленные файлы).
[Обычно это то, что я делаю: mv A B;
... больше изменений ... ; git add -A; git commit
...]
────────
† Это отличается от многих других систем управления исходным кодом, которые могут иметь явное понятие ходов, которые хранятся в коммитах и т. Д.