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
потому что это более общее. Он объединяет две концепции, которые большинство людей знаю, то есть:
git diff <commit>
позволяет увидеть разницу между текущей позицией и предыдущей фиксацией.HEAD
(илиhead
потому что удержание shift раздражает) является ссылкой на кончик вашей ветви. (Для тех из вас, кто считает нажатия клавиш,@
псевдонимHEAD
.)
в сочетании эти два обычно полезных понятия приводят к:
git diff head
git diff @
Для сравнения промежуточной области и репозитория используйте
$git diff --staged
для работы против сравнения репозитория используйте
$ git diff
но если файл изменен и добавлен в промежуточную область ($ git add fileName
) и мы пытаемся увидеть разницу с ( $ git diff
). Это не вернет никакой разницы, так как файл находится в промежуточной области, и он не будет сравниваться с репозиторием.