2010-09-10 2 views

ответ

98
  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^ <--------------------+ 
+0

@Picasso Нарисовано ли вручную или вы использовали какой-то инструмент ASCII art? Есть ли какая-нибудь команда git для этого? ;) – takeshin

+0

@takeshin: Рисованные; это не так сложно. (Но есть режим emacs для рисования ascii art, а не то, что я его использую.) – Amber

+14

+1 для только ascii-art. Одно изображение = 1000 слов; Один ascii-art = 1025 символов. –

0

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

git tutorial на kernal.org очень хорошо читается.

+2

Вы получили '--cached' немного неправильно: он показывает только изменения, которые вы * у * добавляется в индекс (но не совершала). – Amber

9
  1. git diff HEAD: Diff между HEAD и рабочим каталогом.
  2. git diff HEAD^: Разница между прямым предком HEAD и рабочим каталогом.
  3. git diff --cached или синоним git diff --staged: Разница между ГОЛОВКОЙ и индексом.
  4. git diff: Разница между индексом и рабочим каталогом.
+4

У кого-нибудь есть хороший способ запомнить это? Я продолжаю возвращаться сюда. –

+1

@ kevin Лучше, чем делать судоку? – Samuel

9

От Git Community Book:

git diff

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

git diff --cached

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

git diff HEAD

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

4

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

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

Весело смешивания их по своему вкусу :)