Я читал, что при переименовании файлов в git вы должны зафиксировать любые изменения, выполнить ваше переименование и затем поставить переименованный файл. Git распознает файл по содержимому, а не видит его как новый неотслеживаемый файл, и сохраняет историю изменений.
Тем не менее, занимаясь этим вечером, я вернулся к этому git mv
.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Переименуйте мою таблицу стилей в Finder из iphone.css
вmobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: css/iphone.css
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# css/mobile.css
Теперь git думает, что я удалил один файл CSS и добавил новый. Не то, что я хочу, давайте отменим переименование и позвольте git делать всю работу.
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
Вернуться туда, где я начал.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Давайте использовать git mv
вместо.
> $ git mv css/iphone.css css/mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: css/iphone.css -> css/mobile.css
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
Похоже, у нас все хорошо. Так почему же git не узнал переименование в первый раз, когда я использовал Finder?
git mv old new
автоматически обновляет индекс. Когда вы переименуете за пределы Git, вам придется выполнить git add new
и git rm old
внести изменения в индекс. Как только вы это сделаете, все git status
будет работать так, как вы ожидаете.
public_html
каталог, которые отслеживаются в git. Выполнив git add .
и git commit
, он все еще показал кучу «удаленных» файлов в git status
. Я выполнил, git commit -a
и удаления были зафиксированы, но теперь у меня нет истории файлов, которые живут public_html
сейчас. Этот рабочий процесс не так гладко, как хотелось бы.
add+rm
илиmv
- он дает тот же результат. Затем Git использует обнаружение переименования / копирования, чтобы вы знали, что это было переименование. Источник, который вы указали, тоже неточный. Это действительно не имеет значения, измените ли вы + переименовать в том же коммите или нет. Когда вы выполняете различие между изменением и переименованием, обнаружение переименования будет видеть его как изменение переименования +, или, если изменение будет полностью переписано, оно будет отображаться как добавленное и удаленное - все равно не имеет значения, как вы выполнили Это.