git: Почему git diff не показывает различий? - PullRequest
39 голосов
/ 19 января 2011

Если я запускаю 'git status' в моем репо, это дает:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified: myfile

Однако, если я делаю 'git diff myfile', это не показывает различий. Это потому, что я внес изменение и удалил его, чтобы оно вернулось к оригиналу?

Должен ли я запустить 'git checkout myfile', чтобы очистить его?

Ответы [ 3 ]

61 голосов
/ 19 января 2011

Ваш файл уже готов для фиксации.Вы можете показать его разность, используя параметр --cached в git.

git diff --cached myfile

Чтобы удалить его, просто сделайте то, что предлагает статус git в его выводе;)

Вы можете проверить Индекс Git Для получения дополнительной информации.

11 голосов
/ 09 октября 2016

У меня есть предпочтение для псевдонима --staged, в основном потому, что я нахожу, что --staged на самом деле означает то, что я хочу сделать, т.е. покажу мне поэтапные различия.

git diff --staged

Принятый ответ:правильно и у меня нет никаких сомнений с этим.Просто лично подумайте, что --cached чувствует, что git diff кеширует ответ и показывает мне предварительно рассчитанные результаты или что-то в этом роде.

Мне также нравится git diff HEAD, потому что это более общий термин.Он объединяет две концепции, которые знакомы большинству людей, а именно:

  1. git diff <commit> позволяет увидеть разницу между вашей текущей позицией и предыдущим коммитом.

  2. HEAD (или head, потому что удержание смены раздражает) - это ссылка на верхушку вашей ветви.(Для тех из вас, кто считает нажатия клавиш, @ является псевдонимом для HEAD.)

В сочетании эти две обычно полезные концепции приводят к:

git diff head
git diff @
0 голосов
/ 26 февраля 2017

Для сравнения с рабочей областью и сравнением репозитория используйте

$git diff --staged

Для сравнения с рабочей областью репозитория используйте

$ git diff 

, но если файл был изменен и добавлен в промежуточную область ($ git add fileName)и мы пытаемся увидеть разницу с ($ git diff).Он не вернет никакой разницы, так как файл находится в промежуточной области и не будет сравниваться с хранилищем.

...