Как мне показать изменения, которые были поставлены?
Я устроил несколько изменений, чтобы быть совершенным; Как я могу увидеть разницу всех файлов, которые подготовлены для следующего коммита? Я знаю о состоянии git, но я хотел бы увидеть фактические различия, а не только имена файлов, которые находятся в стадии подготовки.
Я видел, что на странице руководства git-diff(1) написано
git diff [--options] [-] […]
Эта форма предназначена для просмотра изменений, внесенных вами по отношению к индексу (промежуточная область для следующего коммита). Другими словами, различия в том, что вы можете сказать git для дальнейшего добавления в индекс, но вы все еще этого не сделали. Вы можете внести эти изменения с помощью git-add(1).
К сожалению, я не могу понять это. Должна быть какая-то удобная строчка, для которой я мог бы создать псевдоним, верно?
16 ответов
Это должно быть просто:
git diff --cached
--cached
означает показывать изменения в кеше / индексе (т.е. поэтапные изменения) по отношению к текущему HEAD
, --staged
это синоним --cached
,
--staged
а также --cached
не указывает на HEAD
просто разница по отношению к HEAD
, Если вы выбираете, что делать, используя git add --patch
(или же git add -p
), --staged
вернет то, что поставлено.
Простая графика делает это более понятным:
мерзавец
Показывает изменения между рабочим каталогом и индексом. Это показывает, что было изменено, но не подготовлено для фиксации.
git diff - кэшированный
Показывает изменения между индексом и заголовком (который является последним коммитом в этой ветви). Это показывает, что было добавлено в индекс и подготовлено для фиксации.
git diff HEAD
Показывает все изменения между рабочим каталогом и HEAD (что включает в себя изменения в индексе). Это показывает все изменения с момента последнего коммита, независимо от того, были ли они подготовлены для коммита или нет.
Также:
Обратите внимание, что git status -v
также показывает постановочные изменения!
(имеется в виду, что вам нужно поставить - git add
-- некоторые изменения. Без постановочных изменений, без различий с git status -v
,
Это происходит с Git 1.2.0, февраль 2006 г.)
В его длинной форме (по умолчанию) git status
имеет недокументированную опцию "verbose", которая фактически отображает разницу между HEAD и index.
И это собирается стать еще более полным: см. " Показать как промежуточное, так и рабочее дерево в git diff?" (Git 2.3.4+, второй квартал 2015 года):
git status -v -v
Если вы заинтересованы в визуальном параллельном просмотре, инструмент диффузного визуального сравнения может это сделать. Это даже покажет три панели, если некоторые, но не все изменения, поставлены. В случае конфликтов будет даже четыре панели.
Вызвать его с
diffuse -m
в вашей рабочей копии Git.
Если вы спросите меня, лучшее визуальное отличие, которое я видел за десятилетие. Кроме того, он не является специфическим для Git: он взаимодействует с множеством других VCS, включая SVN, Mercurial, Bazaar, ...
Смотрите также: Показывать как промежуточное, так и рабочее дерево в git diff?
Для сравнения Staging Area и Repository используйте
$git diff --staged
Для сравнения Сравнение рабочих и репозиториев
$ git diff
но если файл изменен и добавлен в промежуточную область ($ git add fileName
) и мы пытаемся увидеть разницу с ($ git diff
). Он не вернет никакой разницы, поскольку файл находится в промежуточной области и не будет сравниваться с хранилищем.
ИСПОЛЬЗОВАНИЕ ВИЗУАЛЬНОГО DIFF ИНСТРУМЕНТА
Ответ по умолчанию (в командной строке)
Верхние ответы здесь правильно показывают, как просмотреть кэшированные / поэтапные изменения в Index
:
$ git diff --cached
или же $ git diff --staged
который является псевдонимом.
Вместо этого запускается инструмент Visual Diff
Ответ по умолчанию будет выплевывать изменения diff в git bash (т.е. в командной строке или в консоли). Для тех, кто предпочитает визуальное представление различий поэтапного файла, в git доступен скрипт, который запускает инструмент визуального сравнения для каждого просматриваемого файла, а не показывает их в командной строке, называемый difftool
:
$ git difftool --staged
Это будет делать то же самое, что и git diff --staged
За исключением случаев, когда инструмент diff запускается (т. е. каждый раз, когда файл обрабатывается с помощью diff), он запускает инструмент визуального сравнения по умолчанию (в моей среде это kdiff3).
После запуска инструмента скрипт git diff будет приостановлен, пока ваш инструмент визуального сравнения не будет закрыт. Поэтому вам нужно будет закрыть каждый файл, чтобы увидеть следующий.
Вы всегда можете использовать difftool
на месте diff
в командах git
Для всех ваших потребностей визуального различия, git difftool
будет работать вместо любого git diff
Команда, включая все параметры.
Например, чтобы запустить инструмент визуального сравнения, не спрашивая, делать ли это для каждого файла, добавьте -y
вариант (я думаю, что обычно вы захотите это!):
$ git difftool -y --staged
В этом случае он будет извлекать каждый файл в инструменте визуального сравнения, один за другим, вызывая следующий после закрытия инструмента.
Или посмотреть разницу в конкретном файле, который находится в Index
:
$ git difftool -y --staged <<relative path/filename>>
Для всех вариантов см. Справочную страницу:
$ git difftool --help
Настройка Visual Git Tool
Чтобы использовать инструмент визуального мерзавца, отличный от используемого по умолчанию, используйте -t <tool>
опция:
$ git difftool -t <tool> <<other args>>
Или обратитесь к странице руководства difftool, чтобы узнать, как настроить git для использования другого инструмента визуального различия по умолчанию.
Вы можете использовать эту команду.
git diff --cached --name-only
--cached
вариант git diff
означает получить промежуточные файлы, а --name-only
Параметр означает получить только имена файлов.
С версии 1.7 и более поздних она должна быть:
git diff --staged
Если вы намереваетесь нацелиться на удаленную ветку репо, и ваш первый проход в журнале изменений фиксации был неполным, вы можете исправить оператор фиксации, прежде чем нажимать вот так.
в местном масштабе
... внести некоторые изменения...
git diff # look at unstaged changes
git commit -am"partial description of changes"
... вспомнить больше изменений, не упомянутых в коммите...
git diff origin / master # просмотр поэтапных, но не выдвинутых изменений
... изменить постановку коммитов...
git commit --amend -m"i missed mentioning these changes ...."
git push
Если у вас есть более одного файла с поэтапными изменениями, может быть более практичным использовать git add -i
затем выберите 6: diff
и, наконец, выберите интересующие вас файлы.
Чтобы увидеть различия для определенного файла этапа (или файлов), вы можете использовать
git diff --staged -- <path>...
Например,
git diff --staged -- app/models/user.rb
По умолчанию git diff используется для отображения изменений, которые не добавлены в список обновленных файлов git. Но если вы хотите показать изменения, которые были добавлены или добавлены, вам нужно предоставить дополнительные опции, которые позволят git узнать, что вы заинтересованы в разнесенных или добавленных файлах diff.
$ git diff # Default Use
$ git diff --cached # Can be used to show difference after adding the files
$ git diff --staged # Same as 'git diff --cached' mostly used with latest version of git
пример
$ git diff
diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {
- if (a)
+ if (typeof a !== 'undefined')
res = 1;
else
res = 2;
$ git add x/y/z.js
$ git diff
$
После того, как вы добавили файлы, вы не можете использовать по умолчанию "git diff". Вы должны сделать так:-
$ git diff --cached
diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {
- if (a)
+ if (typeof a !== 'undefined')
res = 1;
else
res = 2;
git gui
а также git-cola
графические утилиты, которые позволяют вам просматривать и манипулировать индексом Оба включают простые визуальные различия для поэтапных файлов, и git-cola
также может запустить более сложный инструмент визуального сравнения.
Смотрите мой тесно связанный ответ на Как удалить файл из индекса в git?, а также этот официальный каталог Git - GUI Clients.
В --cached
у меня не получилось, ... где, вдохновленный git log
git diff origin/<branch>..<branch>
сделал.
Еще один инструмент, который упрощает эту задачу, - это режим Magit в Emacs. В его представлении по умолчанию перечислены как поэтапные, так и неустановленные изменения. Он действует как
Думать о gitk
Инструмент также, поставляется с Git и очень полезно, чтобы увидеть изменения