Смотрите разницу между текущим состоянием и последней фиксацией

93

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

Travis1097
источник

Ответы:

113

Если вы еще не добавили файлы в индекс (с помощью git add), просто выполните

git diff

Это покажет разницу между вашим рабочим деревом и индексом.

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

git diff --cached

Наконец, если вы хотите увидеть изменения, сделанные в рабочем дереве, по сравнению с последним commit ( HEAD), вы можете (как указывает Карлос) сделать

git diff HEAD

Эти изменения представляют собой комбинацию git diffи git diff --cached.

Клас Меллборн
источник
2
git diffсравнивает рабочее дерево с индексом, а не с HEAD.
Карлос Мартин Ньето
@ CarlosMartínNieto Вы правы, сэр. Я улучшил свой пост, чтобы отразить это.
Klas Mellbourn
Я запускаю его, но терминал не заканчивается, как мне выйти? ничего не работает.
Франсиско Корралес Моралес
@KlasMellbourn, А можно ли git diffв одном сообщении разницы записать состояние индекса и предыдущий коммит?
alpha_989
2
Ну разобрался его git diff --cached HEAD^:)
alpha_989
33

Если вы только что сделали фиксацию или хотите увидеть, что изменилось в последней фиксации по сравнению с текущим состоянием (при условии, что у вас есть чистое рабочее дерево), вы можете использовать:

git diff HEAD^

Это сравнит HEAD с предыдущей фиксацией. Можно также сделать

git diff HEAD^^

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

git diff b6af6qc

Где b6af6qcпример хеша коммита.

Талламджр
источник
3
Хедз-ап для Windows cmd-версии git - вы должны экранировать символ вставки (^) с помощью самой вставки. Следовательно, "git diff HEAD ^" будет "git diff HEAD ^^". Таким же образом «HEAD ^^» должен вводиться как «HEAD ^^^^».
Eellor
1
В этом ответе я думаю, немного неясно, что означает «последняя фиксация». HEAD^это фиксация перед последней фиксацией.
Клас Меллборн,
3

Вы просите git различать текущую / последнюю фиксацию, что имеет сокращение HEAD.

Таким образом, git diff HEADмы сравним текущее состояние рабочего дерева с текущим коммитом.

Карлос Мартин Ньето
источник
3

это также показывает разницу и какие файлы были изменены / модифицированы.

$ git status 

Отображает пути, которые имеют различия между индексным файлом и текущим фиксацией HEAD, пути, которые имеют различия между рабочим деревом и индексным файлом, а также пути в рабочем дереве, которые не отслеживаются git (и не игнорируются gitignore (5) ). Первый - это то, что вы бы зафиксировали, запустив git commit; второй и третий - это то, что вы можете зафиксировать, запустив git add перед запуском git commit.

https://www.kernel.org/pub/software/scm/git/docs/git-status.html

dekdev
источник
2

Это также работает для меня:

# The last one
git diff HEAD~1 HEAD

# The last but one, etc...
git diff HEAD~2 HEAD~1

Обычно это работает для линейной истории. Это может стать более сложным, если есть также коммиты слияния. Я рекомендую вам заглянуть в этот документ, чтобы получить хорошее и полное объяснение, особенно пример иллюстрации дерева коммитов:

https://git-scm.com/docs/gitrevisions

Мартин Фляска
источник