Как показать изменения, которые были поставлены?

Я поставил несколько изменений, которые нужно совершить; как я могу увидеть diff всех файлов, которые были поставлены для следующего коммита? Я знаю git статус, но мне бы хотелось увидеть фактические различия - а не только имена файлов, которые поставлены.

Я увидел, что git -diff (1) man-страница говорит

git diff [--options] [-] [...]

Эта форма предназначена для просмотра изменений, внесенных вами по отношению к индексу (промежуточная область для следующего фиксации). Другими словами, различия - это то, что вы могли бы сказать git, чтобы добавить к индексу, но у вас все еще нет. Вы можете выполнить эти изменения, используя git -add (1).

К сожалению, я не могу понять это. Должен быть какой-то удобный однострочный, для которого я мог бы создать псевдоним, правильно?

Ответы

Ответ 1

Это должно быть просто:

git diff --cached

--cached означает отображение изменений в кэше/индексе (то есть поэтапных изменений) по отношению к текущему HEAD. --staged является синонимом --cached.

--staged и --cached не указывают на HEAD, только различие по отношению к HEAD. Если вы выбираете, что делать, используя git add --patch (или git add -p), --staged вернет то, что находится в --staged.

Ответ 2

Простая графика делает это понятным:

Simple Git diffs

git diff

Показывает изменения между рабочим каталогом и индексом. Это показывает, что было изменено, но не выполнено для фиксации.

git diff --cached

Показывает изменения между индексом и HEAD (который является последним фиксатором в этой ветке). Это показывает, что было добавлено в индекс и поставлено для фиксации.

git diff HEAD

Показывает все изменения между рабочим каталогом и HEAD (который включает изменения индекса). Это показывает все изменения с момента последнего фиксации, независимо от того, были ли они поставлены для фиксации или нет.

И

Более подробная информация о 365Git.

Ответ 3

Если вы заинтересованы в визуальном бок о бок, этот инструмент diffuse может сделать это. Он даже покажет три панели, если будут проведены некоторые, но не все изменения. В случае конфликтов будет даже четыре панели.

Screenshot of diffuse with staged and unstaged edits

Вызвать его с помощью

diffuse -m

в вашей рабочей копии Git.

Если вы спросите меня, лучший визуальный отличит, который я видел в течение десятилетия. Кроме того, это не относится к Git: он взаимодействует с множеством других VCS, включая SVN, Mercurial, Bazaar,...

Смотрите также: Покажите как старое, так и рабочее дерево в Git diff?

Ответ 4

Обратите внимание, что git status -v также показывает поэтапные изменения! (Это означает, что вам нужно поэтапно - git add - некоторые изменения. Никаких поэтапных изменений, никаких различий со git status -v.
Это происходит с Git 1.2.0, февраль 2006 г.)

В его длинной форме (по умолчанию) git status имеет недокументированную опцию "verbose", которая фактически отображает разницу между HEAD и index.

И это собирается стать еще более полным: см. " Показать как промежуточное, так и рабочее дерево в git diff? " (Git 2.3. 4+, Q2 2015):

git status -v -v

Ответ 5

Вы можете использовать эту команду.

git diff --cached --name-only

Опция --cached git diff означает получение поэтапных файлов, а параметр --name-only означает получение только имен файлов.

Ответ 6

Начиная с версии 1.7 и более поздней версии:

git diff --staged

Ответ 7

ИСПОЛЬЗОВАНИЕ ВИЗУАЛЬНОГО ИНСТРУМЕНТА DIFF

Ответ по умолчанию (в командной строке)

Верхние ответы здесь правильно показывают, как просматривать кэшированные/поэтапные изменения в Index:

$ git diff --cached

или $ git diff --staged, который является псевдонимом.


Запуск Visual Diff Tool вместо

Ответ по умолчанию будет выдавать изменения diff в git bash (то есть в командной строке или в консоли). Для тех, кто предпочитает визуальное представление поэтапных различий файлов, в git имеется script, который запускает инструмент визуального разграничения для каждого просматриваемого файла, а не показывает их в командной строке, называемый difftool:

$ git difftool --staged

Это будет делать то же самое, что и git diff --staged, за исключением того, что каждый раз, когда запускается инструмент diff (т.е. каждый раз, когда файл обрабатывается с помощью diff), он запускает инструмент визуального сравнения по умолчанию (в моей среде это kdiff3).

После запуска инструмента функция git diff script будет приостановлена ​​до тех пор, пока инструмент визуального разграничения не будет закрыт. Поэтому вам нужно будет закрыть каждый файл, чтобы увидеть следующий.


Вы всегда можете использовать difftool вместо diff в git командах

Для всех ваших потребностей в визуальных различиях git difftool будет работать вместо любой команды git diff, включая все параметры.

Например, чтобы запустить средство визуального анализа, не спрашивая, нужно ли это делать для каждого файла, добавьте параметр -y (я думаю, что обычно вам это нужно!):

$ git difftool -y --staged

В этом случае он будет вытягивать каждый файл в инструменте визуального разграничения по одному за раз, после чего следующий инструмент будет закрыт.

Или посмотреть на diff конкретного файла, поставленного в Index:

$ git difftool -y --staged <<relative path/filename>>

Для всех параметров см. справочную страницу:

$ git difftool --help


Настройка Visual git Tool

Чтобы использовать визуальный инструмент git, отличный от стандартного, используйте параметр -t <tool>:

$ git difftool -t <tool> <<other args>>

Или, см. справочную страницу difftool о том, как настроить git на использование другого инструмента сравнения визуальных различий по умолчанию.

Ответ 8

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

 $git diff --staged

Команда сравнивает ваши поэтапные ($ git add fileName) изменения с вашим последним коммитом. Если вы хотите увидеть, что вы поставили, что войдет в ваш следующий коммит, вы можете использовать git diff --staged. Эта команда сравнивает ваши поэтапные изменения с вашим последним коммитом.

Для Рабочего и Стадийного сравнения используйте

$ git diff 

Команда сравнивает то, что находится в вашем рабочем каталоге с тем, что находится в вашей промежуточной области. Важно отметить, что git diff сам по себе не показывает все изменения, сделанные со времени вашего последнего коммита, а только те изменения, которые еще не установлены. Если вы поставили все свои изменения ($ git add fileName), git diff не выдаст вам никакого вывода.

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

Ответ 9

Если ваши намерения состоят в том, чтобы надавить на удаленную ветку репо, и ваш первый проход в журнале изменений фиксации был неполным, вы можете исправить оператор фиксации до нажатия так.

Локально

... внести некоторые изменения...

git diff # look at unstaged changes

git commit -am"partial description of changes"

... напомнить больше изменений, не указанных в commit...

git diff origin/master # посмотреть на поэтапные, но не нажатые изменения

... изменить поэтапную инструкцию фиксации...

git commit --amend -m"i missed mentioning these changes ...."

git push

Ответ 10

Если у вас есть несколько файлов с поэтапными изменениями, более целесообразно использовать git add -i, затем выбрать 6: diff и, наконец, выбрать интересующие вас файлы.

Ответ 11

По умолчанию 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;

Ответ 12

git gui и git-cola - графические утилиты, позволяющие просматривать и обрабатывать индекс. Оба включают простые визуальные различия для поэтапных файлов, а git-cola также может запускать более сложный инструмент визуального сравнения "бок о бок".

См. мой близкий ответ на Как удалить файл из индекса в git?, а также этот официальный каталог Git - Клиенты GUI.

Ответ 13

Подумайте о инструменте gitk, также имеющем git и очень полезно увидеть изменения

Ответ 14

Как насчет

git diff --cached --name-only