it-swarm.com.ru

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

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

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

git diff [--options] [-] […]

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

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

1925
Frerich Raabe

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

git diff --cached

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

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

2365
CB Bailey

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

Simple Git diffs

git diff

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

git diff --cached

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

git diff HEAD

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

Кроме того, :

Немного подробнее о 65Git.

1507
Abizern

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

Screenshot of diffuse with staged and unstaged edits

Вызвать его с

diffuse -m

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

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

Смотрите также: Показывать как промежуточное, так и рабочее дерево в git diff?

52
krlmlr

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

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

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

git status -v -v
47
VonC

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

git diff --cached --name-only

Параметр --cachedgit diff означает получение промежуточных файлов, а параметр --name-only означает получение только имен файлов.

25
Yash Patadia

С версии 1.7 и более поздних она должна быть:

git diff --staged
16
ML13

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

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

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

$ git diff --cached

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


Вместо этого запускается инструмент Visual Diff

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

$ git difftool --staged

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

После запуска инструмента скрипт 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

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

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

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

14
LightCC

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

$git diff --staged

Для сравнения Сравнение рабочих и репозиториев

$ git diff 

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

9
Goyal Vicky

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

В местном масштабе

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

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
8
Marc Condon

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

7
Fred Schoen

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

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

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

2
nobar

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

0
sam