2013-08-29 2 views
0

При удалении файла, как такУдаление файлов и удаление из индекса стадирования Git и

git rm file_name.ext 

я должен совершить эти изменения? Зачем?

Если мне нужно его совершить, я делаю это так?

git commit . -m "Delete file_name.txt" 

Вот почему я спросил: Я добавил неправильный файл индекса ступенчатого Git и

git add wrong_file.txt 

поэтому я удалил его

git reset HEAD wrong_file.txt 

, но после того, как сделать это, я заметил это сообщение

$ git reset HEAD wrong_file.txt 
$ git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  deleted: test2.txt 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  wrong_file.txt 
$ 

и когда я добавил коррекцию т файл индекса ступенчатого, я заметил, что файл test2.txt, что я удалил был переименован в right_file.txt

$ touch right_file.txt && git add right_file.txt 
$ git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  renamed: test2.txt -> right_file.txt 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  wrong_file.txt 
$ 

ответ

1

Кратчайший ответ: «да». До вас 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 и суммирует разницу *, и вам все равно, сколько раз вы добавляли или удаляли или перемещали вещи, это просто сравнивает «то, что сцена выглядит сейчас» против «что это выглядел как на последнем замораживании ».

[* Он также сравнивает этап в рабочем каталоге и суммирует что разница, как «изменения не постановочных для фиксации» и/или «неотслеживаемых файлов».]

+0

+1 Большое спасибо за ваш очень информативный ответ. – Anthony

Смежные вопросы