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


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

Я увидел, что ГИТ-Diff (1) справочная страница

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

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

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


1665


источник


Ответы:


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

git diff --cached

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

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


2050



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

Simple Git diffs

git diff

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

git diff --cached

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

git diff HEAD

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

Также :

Есть немного более подробная информация о 365Git.


1400



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

Screenshot of diffuse with staged and unstaged edits

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

diffuse -m

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

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

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


51



Обратите внимание, что 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

37



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

git diff --cached --name-only

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


21



Начиная с версии 1.7 и выше она должна быть:

git diff --staged

14



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

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

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

$ git diff --cached

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


Запуск инструмента визуального разлома вместо

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

$ git difftool --staged

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

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

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

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

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


10



If you have more than one file with staged changes, it may more practical to use git add -i, then select 6: diff, and finally pick the file(s) you are interested in.


7



If your intentions are to push-target a remote repo branch and your first pass at a commit change log were incomplete, you can correct the commit statement before pushing like this.

Locally

... make some changes ...

git diff # look at unstaged changes

git commit -am"partial description of changes"

... recall more changes unmentioned in commit ...

git diff origin/master # look at staged but not pushed changes

... amend staged commit statement ...

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

git push

7



For Staging Area vs Repository comparison use

$git diff --staged

For Working vs Repository comparison use

$ git diff 

but if a file is changed and added to staging area ($ git add fileName) and we try to see the difference with ( $ git diff). It will not return any difference since the file is in staging area and it will not be compared with the repository.


7



By default git diff is used to show the changes which is not added to the list of git updated files. But if you want to show the changes which is added or stagged then you need to provide extra options that will let git know that you are interested in stagged or added files 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 

Example

$ 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
$

Once you added the files , you can't use default of 'git diff' .You have to do like this:-

$ 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;

4