Как показать изменения, которые были поставлены?
Я поставил несколько изменений, которые нужно совершить; как я могу увидеть 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
Простая графика делает это понятным:
git diff
Показывает изменения между рабочим каталогом и индексом. Это показывает, что было изменено, но не выполнено для фиксации.
git diff --cached
Показывает изменения между индексом и HEAD (который является последним фиксатором в этой ветке). Это показывает, что было добавлено в индекс и поставлено для фиксации.
git diff HEAD
Показывает все изменения между рабочим каталогом и HEAD (который включает изменения индекса). Это показывает все изменения с момента последнего фиксации, независимо от того, были ли они поставлены для фиксации или нет.
И
Более подробная информация о 365Git.
Ответ 3
Если вы заинтересованы в визуальном бок о бок, этот инструмент diffuse может сделать это. Он даже покажет три панели, если будут проведены некоторые, но не все изменения. В случае конфликтов будет даже четыре панели.
Вызвать его с помощью
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