Я читал, что при переименовании файлов в 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
#
Похоже, мы хороши. Так почему же я не узнал переименование в первый раз, когда использовал Finder?