Кратчайший ответ: «да». До вас git commit
ваши изменения сохраняются только в индексе (промежуточная область). Операция commit
берет все поэтапные изменения и делает новое единое соглашение, содержащее все их, сохраняя их «навсегда» (если вы не делаете то, что «переписывает историю», как ее называют).
Сообщение «переименовано» от git status
основано на сравнении файла для удаления с тем, который должен быть добавлен. Если совпадение содержимого, git предполагает (на выходе status
), что вы должны переименовать файл, а не удалять его и добавлять другое. Например:
$ mkdir t; cd t; git init; git commit --allow-empty -m initial
Initialized empty Git repository in ...
[master (root-commit) bca9d63] initial
$ $ echo 'file contents' > somefile
$ git add somefile && git commit -m c1
[master c37af4b] c1
1 file changed, 1 insertion(+)
create mode 100644 somefile
Теперь у меня есть репо с двумя фиксаций, начальный пустой и «c1» (c37af4b
), содержащей somefile
.
$ git rm somefile
rm 'somefile'
$ echo 'file contents' > newfile
$ git add newfile
Я удалил somefile
и создал новый файл, но его содержимое точно так же, как и файл я удалил, так git status
обнаруживает это:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: somefile -> newfile
#
После того, как я делаю git commit
я буду ревизия, которая больше не имеет somefile
, но имеет newfile
. git diff
также обнаружит, что файл выглядит точно так же, и предположит, я переименовал его:
$ git commit -m c2
[master a85cea2] c2
1 file changed, 0 insertions(+), 0 deletions(-)
rename somefile => newfile (100%)
$ git diff HEAD^
diff --git a/somefile b/newfile
similarity index 100%
rename from somefile
rename to newfile
промежуточной область (так называемый индекс), где вы устраиваете вещи, пока вы, как договоренность. Затем вы получите commit
, чтобы заморозить копию этой композиции, доступной навсегда больше. До вас commit
, git предполагает, что вы еще не совсем удовлетворены. git status
сравнивает текущую компоновку этапа с фиксацией HEAD
и суммирует разницу *, и вам все равно, сколько раз вы добавляли или удаляли или перемещали вещи, это просто сравнивает «то, что сцена выглядит сейчас» против «что это выглядел как на последнем замораживании ».
[* Он также сравнивает этап в рабочем каталоге и суммирует что разница, как «изменения не постановочных для фиксации» и/или «неотслеживаемых файлов».]
+1 Большое спасибо за ваш очень информативный ответ. – Anthony