Каковы различия между этими командами git diff? - PullRequest
51 голосов
/ 10 сентября 2010

В чем различия между следующими командами git?

  1. git diff HEAD
  2. git diff HEAD^
  3. git diff --cached или синоним git diff --staged
  4. git diff

Ответы [ 5 ]

113 голосов
/ 10 сентября 2010
  1. git diff HEAD - Показывает, что изменилось с момента последнего коммита.
  2. git diff HEAD^ - Показывает, что изменилось с момента совершения до последнего принятия.
  3. git diff --cached - Показать, что было добавлено в индекс с помощью git add, но еще не зафиксировано.
  4. git diff - Показать, что изменилось, но еще не было добавлено в индекс через git add.

Это выглядит так:

     Working
    Directory  <----+--------+------+
        |           |        |      |    
        |           |        |      |
        V           |        |      |    
    "git add"       |        |      |    
        |         diff       |      |    
        |           |        |      |    
        V           |        |      |    
     Index     <----+    diff HEAD  |            
        |           |        |      |       
        |           |        |      |
        V           |        |      |       
  "git commit"      |        |      |
        |     diff --cached  |      |
        |     diff --staged  |      |
        V           |        |      |
      HEAD     <----+--------+      |
        |                           |
        |                        diff HEAD^
        V                           |
previous "git commit"               |
        |                           |
        |                           |
        V                           |
      HEAD^    <--------------------+
10 голосов
/ 10 сентября 2010

Из Git Community Book :

git diff

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

git diff --cached

покажет разницу между индексом и вашим последним коммитом;что вы будете делать, если вы запустите «git commit» без опции «-a».

git diff HEAD

показывает изменения врабочий каталог с момента вашего последнего коммита;что вы будете делать, если запустите "git commit -a".

9 голосов
/ 10 сентября 2010
  1. git diff HEAD: разница между HEAD и рабочим каталогом.
  2. git diff HEAD^: разница между прямым предком HEAD и рабочим каталогом.
  3. git diff --cached или синоним git diff --staged: разница между HEAD и индексом.
  4. git diff: разница между индексом и рабочим каталогом.
5 голосов
/ 07 июля 2016

Вот простой способ запомнить эти команды:

  • По умолчанию источником git diff считается рабочий каталог, а его целью является индекс.
  • Добавление флага --cached меняет источник на индекс.Это не обязательно меняет цель, когда вы добавляете больше аргументов.Но для удобства цель становится последним коммитом, если ничего не предоставлено.
  • Добавление коммита в качестве аргумента меняет цель.
  • Добавление двух коммитов в качестве аргументов изменяет как источник, так и цель соответственно.

Получайте удовольствие, смешивая их по своему вкусу:)

0 голосов
/ 10 сентября 2010

HEAD - текущий указатель HEAD в дереве, HEAD^ - фиксация перед HEAD. --cached Я не уверен в этом. --cached покажет вам любые изменения, которые вы внесли, но еще не добавили в индекс.

Учебное пособие git на kernal.org очень хорошо прочитано.

...