2016-05-13 3 views
0

Я побежал следующие команды и запутался о выходе по git diff HEAH, а также git diff«Неправильный» выход по мерзавцу дифф ГОЛОВЕ и мерзавец дифф

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo 
$ git init 

Initialized empty Git repository in C:/Users/Athrun/Desktop/path/to/my/workspace           /demo/.git/ 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ echo "Hello World" > welcome.txt 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git add welcome.txt 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git commit -m "\"Hello World\" committed" 

[master (root-commit) eb00b00] "Hello World" committed 
1 file changed, 1 insertion(+) 
create mode 100644 welcome.txt 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git rm --cached welcome.txt 

rm 'welcome.txt' 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git diff HEAD 

diff --git a/welcome.txt b/welcome.txt 
deleted file mode 100644 
index 557db03..0000000 
--- a/welcome.txt 
+++ /dev/null 
@@ -1 +0,0 @@ 
-Hello World 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git diff 

В принципе, я инициализирую репозиторий, создал файл со строкой «Hello World» и передал файл. Затем я выполнил команду git rm --cached welcome.txt, чтобы удалить «файл» (не уверен, могу ли я назвать это «файл» здесь) в промежуточной области. Затем я выполнил две команды git diff HEAD и git diff, чтобы сравнить изменения с HEAD и промежуточной областью.

Здесь я понимаю, что рабочий каталог и HEAD имеют одну и ту же версию файла, `git diff HEAD 'должен ничего показывать, пока« git diff »должен показывать« Hello World ».

Однако выход просто противоположный.

ответ

1

При использовании рабочего каталога в сравнении учитываются только отслеживаемые файлы.

  1. git diff HEAD: HEAD один файл welcome.txt, рабочий каталог пуст (файлы не отслеживаются), так diff является welcome.txt удалены.
  2. git diff: индекс пуст, рабочий каталог пуст (файлы не отслеживаются), поэтому diff пуст.
+0

@PetSerAI благодарит за ваш ответ, я не понимал, что git rm --cached разобрал файл. Это очень помогает. – user1888955

0

К моему пониманию GIT, ниже приведено объяснение вашего запроса.

Вы передали файл welcome.txt с помощью «Hello world». Итак, после commit ($ git commit -m "\" Hello World \ "commit") вы получите идентификатор фиксации (скажем C1). Теперь ваш HEAD будет указывать на C1.

После этого вы меняете файл на (git rm --cached welcome.txt), так что ваше рабочее дерево изменилось. Поскольку изменения не выполняются, ваши изменения присутствуют в вашем рабочем дереве.

1 - git diff HEAD - Предполагается показать разницу между HEAD (C1) и рабочим деревом, которое является «Hello World».

Так что сделайте запись изменений «git rm», и у вас не должно быть разницы.

2 - git diff - показать разницу между областью постановки и рабочим деревом.

Но я думаю, что это не должно быть пустым. Так что это не понятно даже мне.

Исправьте меня, если я ошибаюсь или не понял ваш вопрос правильно.

+0

Благодарим вас за ответ. git rm - кэширует, не удаляет файл, фактически просматривает файл, который привел к проблеме, которую я вчера имел. – user1888955

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