git: почему git diff не показывает никаких различий?

Если я запускаю "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 ответов


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

git diff --cached myfile

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

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


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

git diff --staged

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

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

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

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

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

git diff head
git diff @

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

$git diff --staged

для работы против сравнения репозитория используйте

$ git diff 

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