Я устроил несколько изменений, чтобы быть совершенным; Как я могу увидеть разницу всех файлов, которые подготовлены для следующего коммита? Я знаю о состоянии git , но я хотел бы увидеть фактические различия, а не только имена файлов, которые ставятся.
Я видел, что на странице руководства git-diff (1) написано
git diff [--options] [-] […]
Эта форма предназначена для просмотра изменений, внесенных вами по отношению к индексу (промежуточная область для следующего коммита). Другими словами, различия в том, что вы можете сказать git для дальнейшего добавления в индекс, но вы все еще этого не сделали. Вы можете внести эти изменения, используя git-add (1).
К сожалению, я не могу понять это. Должна быть какая-то удобная строчка, для которой я мог бы создать псевдоним, верно?
git status -v
тоже работает Смотрите мой ответ нижеless
, как в:git status -v | less
- управляемые куски :)Ответы:
Это должно быть просто:
--cached
означает показывать изменения в кеше / индексе (т.е. поэтапные изменения) по отношению к текущемуHEAD
.--staged
это синоним для--cached
.--staged
и--cached
не указывает наHEAD
, просто разница в отношенииHEAD
. Если вы выбираете, что совершить, используяgit add --patch
(илиgit add -p
),--staged
вернет то, что поставлено.источник
git diff --name-only --cached
каждого поста на stackoverflow.com/a/4525025/255187git difftool --staged
вместоgit diff --staged
запуска инструмента визуального различия по умолчанию для каждого файла.difftool
может быть замененоdiff
другими аргументами.git difftool --staged -d
для сравнения двух каталогов в визуальном инструменте, а не один файл за один раз.git diff --cached -- <stagedfile>
Простая графика делает это более понятным:
мерзавец
Показывает изменения между рабочим каталогом и индексом. Это показывает, что было изменено, но не подготовлено для фиксации.
git diff - кэшированный
Показывает изменения между индексом и заголовком (который является последним коммитом в этой ветви). Это показывает, что было добавлено в индекс и подготовлено для фиксации.
git diff HEAD
Показывает все изменения между рабочим каталогом и HEAD (что включает в себя изменения в индексе). Это показывает все изменения с момента последнего коммита, независимо от того, были ли они подготовлены для коммита или нет.
Также :
Немного подробнее о 365Git.
источник
foo.c
и не выполнятьgit add foo.c
, тоfoo.c
это не в индексе ; это не организовано для совершения. Еслиgit diff foo.c
наивно сравнивать работуfoo.c
с индексом, то он должен будет показать гигантскую разницу между пустым / несуществующим файлом и всем содержимымfoo.c
. Таким образом, фактически, когда файл не существует в индексеgit diff
, для этого файла возвращается к использованиюHEAD
копии.HEAD
которой применяются поэтапные изменения. Помните, что Git сохраняет изменения, а не целые файлы. Когда вы создаете файл, он только сохраняет сделанные изменения. Если индекс пустой, как вы подразумеваете, он не будет знать, как сохранить изменения в индексе, и должен будет сохранить весь файл как «недавно добавленный» - что неправильно.HEAD
будет неизменная версияfoo.c
файла (они не являются физическими копиями, а просто логическими копиями для вас и меня. Для Git это просто тот же поток данных, к которому относится каждый коммит, когда-либо связанный с этим файлом ). Поэтому , когда вы делаетеgit diff
на полностью unstagedfoo.c
это на самом деле не отступая кHEAD
нему на самом деле делают различия с индексом (что происходит , чтобы содержать ту же самую версию файла , как этоHEAD
делает). Так что графика верна.git status -v
эквивалентенgit diff --cached
(плюсgit status
конечно)Если вы заинтересованы в визуальном параллельном просмотре, инструмент диффузного визуального сравнения может это сделать. Это даже покажет три панели, если некоторые, но не все изменения, поставлены. В случае конфликтов будет даже четыре панели.
Вызвать его с
в вашей рабочей копии Git.
Если вы спросите меня, лучшее визуальное отличие, которое я видел за десятилетие. Кроме того, он не является специфическим для Git: он взаимодействует с множеством других VCS, включая SVN, Mercurial, Bazaar, ...
Смотрите также: Показывать как промежуточное, так и рабочее дерево в git diff?
источник
brew install diffuse
работает на OS X. Не показывает 3 панели, если внесенные и поэтапные изменения - вы имели в виду изменения еще не в индексе?Обратите внимание, что
git status -v
также показывает поэтапные изменения! (имеется в виду, что вам нужно выполнить поэтапноеgit add
изменение - некоторые изменения. Никаких поэтапных изменений, никаких изменений сgit status -v
.Это происходит с Git 1.2.0, февраль 2006 г. )
В его длинной форме (по умолчанию)
git status
имеется недокументированная «подробная» опция, которая фактически отображает разницу между HEAD и index.И это собирается стать еще более полным: см. « Показать как промежуточное, так и рабочее дерево в git diff? » (Git 2.3.4+, второй квартал 2015 года):
источник
git diff HEAD
git status -vv
также включает в себя то, чтоgit diff HEAD
делает.git version 1.8.3.1
. Я знаю, что он старый, но, если возможно, обратите внимание, когда этот флаг был введен.git status -v
старше ( github.com/git/git/commit/… , git 1.2.0, февраль 2006!). Обратите внимание, что он отображает разницу между индексом иHEAD
: если вы добавили что-либо к индексу (нетgit add
), тоgit status -v
не будет отображаться никакой разницы.git status -v -v
более поздняя версия (Git 2.3.4, март 2015 г.)git diff -v
.Вы можете использовать эту команду.
--cached
Вариантgit diff
средств , чтобы в постановке файлов, а--name-only
опция означает получить только имена файлов.источник
--name-only
возможностью, которую я мог бы также использовать регулярныйgit status
С версии 1.7 и более поздних она должна быть:
источник
ИСПОЛЬЗОВАНИЕ ВИЗУАЛЬНОГО DIFF ИНСТРУМЕНТА
Ответ по умолчанию (в командной строке)
Верхние ответы здесь правильно показывают, как просмотреть кэшированные / поэтапные изменения в
Index
:или
$ git diff --staged
который является псевдонимом.Вместо этого запускается инструмент Visual Diff
Ответ по умолчанию выдаст изменения diff в git bash (т.е. в командной строке или в консоли). Для тех, кто предпочитает визуальное представление различий поэтапного файла, в git доступен скрипт, который запускает инструмент визуального сравнения для каждого просматриваемого файла, а не показывает их в командной строке, который называется
difftool
:Это будет делать то же самое
git diff --staged
, что и за исключением того, что каждый раз, когда запускается инструмент diff (т. Е. Каждый раз, когда файл обрабатывается diff), он запускает инструмент визуального сравнения по умолчанию (в моей среде это kdiff3 ).После запуска инструмента скрипт git diff будет приостановлен, пока ваш инструмент визуального сравнения не будет закрыт. Поэтому вам нужно будет закрыть каждый файл, чтобы увидеть следующий.
Вы всегда можете использовать
difftool
вместоdiff
команд GitДля всех ваших потребностей визуального различия,
git difftool
будет работать вместо любойgit diff
команды, включая все параметры.Например, чтобы запустить инструмент визуального сравнения, не спрашивая, делать ли это для каждого файла, добавьте
-y
опцию (я думаю, что обычно вы захотите это !!):В этом случае он будет извлекать каждый файл в инструменте визуальных различий, по одному, вызывая следующий после закрытия инструмента.
Или посмотреть разницу в конкретном файле, который находится в
Index
:Для всех вариантов см. Справочную страницу:
Настройка Visual Git Tool
Чтобы использовать инструмент визуального мерзавца, отличный от используемого по умолчанию, используйте
-t <tool>
параметр:Или обратитесь к справочной странице difftool, чтобы узнать, как настроить git для использования другого инструмента визуального сравнения по умолчанию.
Пример
.gitconfig
записи для vscode как инструмента сравнения / слиянияЧасть настройки difftool включает изменение
.gitconfig
файла, либо с помощью команд git, которые изменяют его за кулисами, либо редактируют его напрямую.Вы можете найти его
.gitconfig
в своем домашнем каталоге, например,~
в Unix или обычноc:\users\<username>
в Windows).Или вы можете открыть пользователя
.gitconfig
в редакторе Git по умолчанию с помощьюgit config -e --global
.Вот примеры записей в моем глобальном пользователе
.gitconfig
для VS Code как инструмента сравнения и объединения:источник
Для сравнения с промежуточной областью и репозиторием (последним коммитом) используйте
Команда сравнивает ваши изменения staged (
$ git add fileName
) с вашим последним коммитом. Если вы хотите увидеть, что вы поставили, что войдет в ваш следующий коммит, вы можете использовать git diff --staged. Эта команда сравнивает ваши поэтапные изменения с вашим последним коммитом.Для Рабочего и Стадийного сравнения используйте
Команда сравнивает то, что находится в вашем рабочем каталоге с тем, что находится в вашей промежуточной области. Важно отметить, что git diff сам по себе не отображает все изменения, сделанные со времени вашего последнего коммита, а только те изменения, которые еще не установлены. Если вы поставили все свои изменения (
$ git add fileName
), git diff не даст вам никакого вывода.Кроме того, если вы создадите файл (
$ git add fileName
) и затем отредактируете его, вы можете использовать git diff, чтобы увидеть изменения в файле, которые являются промежуточными, и изменения, которые не являются ступенчатыми.источник
$ git diff
" . Я вполне уверен, чтоgit diff
сравнивает между Рабочим и Постановочным. См stackoverflow.com/a/1587952Если вы намереваетесь нацелиться на удаленную ветку репо, и ваш первый проход в журнале изменений фиксации был неполным, вы можете исправить оператор фиксации, прежде чем нажимать вот так.
в местном масштабе
... внести некоторые изменения ...
... вспомнить больше изменений, не упомянутых в коммите ...
git diff origin / master # посмотреть внесенные, но не запрошенные изменения
... изменить постановку коммитов ...
источник
Если у вас есть более одного файла с поэтапными изменениями, его может быть более практичным для использования
git add -i
, затем выберите6: diff
и, наконец, выберите интересующий вас файл (ы).источник
По умолчанию git diff используется для отображения изменений, которые не добавлены в список обновленных файлов git. Но если вы хотите , чтобы показать изменения , которые добавляются или stagged , то вам необходимо предоставить дополнительные параметры , которые позволят GIT знать , что вы заинтересованы в stagged или добавлены файлы дифф .
пример
После того, как вы добавили файлы, вы не можете использовать по умолчанию «git diff». Вы должны сделать так: -
источник
git gui
иgit-cola
графические утилиты, которые позволяют вам просматривать и манипулировать индексом. Оба включают простые визуальные различия для поэтапных файлов, аgit-cola
также могут запустить более сложный инструмент визуального сравнения.Смотрите мой тесно связанный ответ на Как удалить файл из индекса в git? , а также этот официальный каталог Git - GUI Clients .
источник
Подумайте также об
gitk
инструменте, снабженном git и очень полезным, чтобы увидеть измененияисточник