Я поставил несколько изменений, которые нужно совершить; как я могу увидеть diff всех файлов, которые были поставлены для следующего коммита? Я знаю git статус, но мне бы хотелось увидеть фактические различия - а не только имена файлов, которые поставлены.
Я увидел, что git -diff (1) man-страница говорит
git diff [--options] [-] [...]
Эта форма предназначена для просмотра изменений, внесенных вами по отношению к индексу (промежуточная область для следующего фиксации). Другими словами, различия - это то, что вы могли бы сказать git, чтобы добавить к индексу, но у вас все еще нет. Вы можете выполнить эти изменения, используя git -add (1).
К сожалению, я не могу понять это. Должен быть какой-то удобный однострочный, для которого я мог бы создать псевдоним, правильно?
Это должно быть просто:
git diff --cached
--cached
означает отображение изменений в кеше/индексе (т.е. поэтапных изменениях) против текущего HEAD
. --staged
является синонимом --cached
.
ИЗМЕНИТЬ
Чтобы прояснить вышеприведенное утверждение, --staged
и --cached
не указывают на HEAD
, просто отличие по отношению к HEAD
. Если вы черри выбираете, что делать, используя git add --patch
(или git add -p
), --staged
вернет то, что устраивается.
git diff --name-only --cached
каждого сообщения на stackoverflow.com/a/4525025/255187
git difftool --staged
вместо git diff --staged
чтобы запустить инструмент визуального сравнения по умолчанию для каждого файла. difftool
может быть заменен на diff
другими аргументами.
Простая графика делает это понятным:
git diff
Показывает изменения между рабочим каталогом и индексом. Это показывает, что было изменено, но не выполнено для фиксации.
git diff --cached
Показывает изменения между индексом и HEAD (который является последним фиксатором в этой ветке). Это показывает, что было добавлено в индекс и поставлено для фиксации.
git diff HEAD
Показывает все изменения между рабочим каталогом и HEAD (который включает изменения индекса). Это показывает все изменения с момента последнего фиксации, независимо от того, были ли они поставлены для фиксации или нет.
И
Более подробная информация о 365Git.
foo.c
и вы не выполняете git add foo.c
, то foo.c
отсутствует в индексе ; это не организовано для совершения. Если git diff foo.c
наивно сравнивать с рабочим foo.c
для индекса, то он должен будет показать гигантский diff между пустым / несуществующим файлом и всем содержимым foo.c
Таким образом, на самом деле, когда файл не существует в индексе, для этого файла git diff
возвращается к использованию копии HEAD
.
Если вы заинтересованы в визуальном бок о бок, этот инструмент diffuse может сделать это. Он даже покажет три панели, если будут проведены некоторые, но не все изменения. В случае конфликтов будет даже четыре панели.
Вызвать его с помощью
diffuse -m
в вашей рабочей копии Git.
Если вы спросите меня, лучший визуальный отличит, который я видел в течение десятилетия. Кроме того, это не относится к Git: он взаимодействует с множеством других VCS, включая SVN, Mercurial, Bazaar,...
Смотрите также: Покажите как старое, так и рабочее дерево в Git diff?
Обратите внимание, что git status -v
также показывает поэтапные изменения!
(это означает, что вам нужно устроиться - git add
- некоторые изменения. Никаких поэтапных изменений, никаких различий с git status -v
.
Он делает это, поскольку Git 1.2.0, февраль 2006 г.)
В своей длинной форме (по умолчанию) git status
имеет недокументированную "подробную" опцию, которая фактически отображает разницу между HEAD и индексом.
И он должен стать еще более полным: см. "Показывать как поэтапное, так и рабочее дерево в git diff?" (git 2.3.4+, Q2 2015):
git status -v -v
git diff HEAD
git status -vv
также включает в себя то, что делает git diff HEAD
.
Вы можете использовать эту команду.
git diff --cached --name-only
Опция --cached
git diff
означает получение поэтапных файлов, а параметр --name-only
означает получение только имен файлов.
Начиная с версии 1.7 и более поздней версии:
git diff --staged
Если у вас есть несколько файлов с поэтапными изменениями, более целесообразно использовать git add -i
, затем выбрать 6: diff
и, наконец, выбрать интересующие вас файлы.
Для сопоставления хранилища и сравнения хранилища
$git diff --staged
Для сравнения с рабочим сопоставлением хранилища используйте
$ git diff
но если файл изменен и добавлен в промежуточную область ($ git add fileName
), и мы попытаемся увидеть разницу с ($ git diff
). Он не будет возвращать никаких различий, так как файл находится в промежуточной области, и он не будет сравниваться с репозиторием.
$ git diff
" . Я уверен, что git diff
сравнивает между Рабочим и Постановочным. См. Stackoverflow.com/a/1587952
Если ваши намерения состоят в том, чтобы надавить на удаленную ветку репо, и ваш первый проход в журнале изменений фиксации был неполным, вы можете исправить оператор фиксации до нажатия так.
... внести некоторые изменения...
git diff # look at unstaged changes
git commit -am"partial description of changes"
... напомнить больше изменений, не указанных в commit...
... изменить поэтапную инструкцию фиксации...
git commit --amend -m"i missed mentioning these changes ...."
git push
Верхние ответы здесь правильно показывают, как просматривать кэшированные/поэтапные изменения в Index
:
$ git diff --cached
или $ git diff --staged
, который является псевдонимом.
Ответ по умолчанию будет выдавать изменения 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
Чтобы использовать визуальный инструмент git, отличный от стандартного, используйте параметр -t <tool>
:
$ git difftool -t <tool> <<other args>>
Или, см. справочную страницу difftool о том, как настроить git на использование другого инструмента сравнения визуальных различий по умолчанию.
git gui
и git-cola
- графические утилиты, позволяющие просматривать и обрабатывать индекс. Оба включают простые визуальные различия для поэтапных файлов, а git-cola
также может запускать более сложный инструмент визуального сравнения "бок о бок".
См. мой близкий ответ на Как удалить файл из индекса в git?, а также этот официальный каталог Git - Клиенты GUI.
По умолчанию 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;
Подумайте о инструменте gitk
, также имеющем git и очень полезно увидеть изменения
git status -v
тоже работает. Смотрите мой ответ нижеless
каналу, как в:git status -v | less
- управляемые куски :)