Каковы различия между этими командами git diff? - программирование
Подтвердить что ты не робот

Каковы различия между этими командами git diff?

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

  • git diff HEAD
  • git diff HEAD^
  • git diff --cached или синоним git diff --staged
  • git diff
4b9b3361

Ответ 1

  • git diff HEAD - показывает, что изменилось с момента последнего коммита.
  • git diff HEAD^ - показывает, что изменилось с момента фиксации до последней фиксации.
  • git diff --cached - Показать, что было добавлено в индекс через git add, но еще не выполнено.
  • 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^    <--------------------+

Ответ 2

  • git diff HEAD: Diff между HEAD и рабочим каталогом.
  • git diff HEAD^: Разница между прямым предком HEAD и рабочим каталогом.
  • git diff --cached или синоним git diff --staged: Diff между HEAD и индексом.
  • git diff: Разность между индексом и рабочим каталогом.

Ответ 3

Из Git Community Book:

git diff

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

git diff --cached

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

git diff HEAD

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

Ответ 4

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

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

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

Ответ 5

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

git учебник на kernal.org - очень хорошее чтение.