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', чтобы очистить его?
Ответы
Ответ 1
Ваш файл уже поставлен для фиксации. Вы можете показать его diff с помощью опции --cached
git.
git diff --cached myfile
Чтобы отключить его, просто выполните то, что предлагает git в нем вывод;)
Вы можете проверить Индекс git Для получения дополнительной информации.
Ответ 2
Я предпочитаю псевдоним --staged
, в основном потому, что обнаруживаю, что --staged
на самом деле означает то, что я хочу сделать, то есть показать мне поэтапные различия.
git diff --staged
Принятый ответ правильный, и у меня нет с ним проблем. Просто лично подумайте, что --cached
чувствует себя как git diff кэширует ответ и показывает мне предварительно рассчитанные результаты или что-то в этом роде.
Мне также нравится git diff HEAD
, потому что он более общий. Он объединяет две концепции, которые большинство людей знают, то есть:
-
git diff <commit>
позволяет вам видеть разницу между текущей позицией и предыдущей фиксацией.
-
HEAD
(или HEAD
, потому что удерживание сдвига раздражает) является ссылкой на кончик вашей ветки. (Для тех из вас, кто считает нажатия клавиш, @
является псевдонимом для HEAD
.)
Комбинированные, эти две общепринятые концепции приводят к:
git diff head
git diff @
Ответ 3
Для сопоставления хранилища и сравнения хранилища
$git diff --staged
Для сравнения с рабочим сопоставлением хранилища используйте
$ git diff
но если файл изменен и добавлен в промежуточную область ($ git add fileName
), и мы попытаемся увидеть разницу с ($ git diff
). Он не будет возвращать никаких различий, так как файл находится в промежуточной области, и он не будет сравниваться с репозиторием.