Иногда, когда я собираюсь сделать коммит, я не могу точно вспомнить, что изменилось с момента последнего коммита. Как я могу увидеть разницу в текущем состоянии кода и последней фиксации?
Иногда, когда я собираюсь сделать коммит, я не могу точно вспомнить, что изменилось с момента последнего коммита. Как я могу увидеть разницу в текущем состоянии кода и последней фиксации?
Ответы:
Если вы еще не добавили файлы в индекс (с помощью git add), просто выполните
git diff
Это покажет разницу между вашим рабочим деревом и индексом.
Если вы добавили файлы в индекс, вам нужно сделать это, чтобы показать различия между индексом и последней фиксацией (HEAD).
git diff --cached
Наконец, если вы хотите увидеть изменения, сделанные в рабочем дереве, по сравнению с последним commit ( HEAD), вы можете (как указывает Карлос) сделать
git diff HEAD
Эти изменения представляют собой комбинацию git diffи git diff --cached.
git diffв одном сообщении разницы записать состояние индекса и предыдущий коммит?
git diff --cached HEAD^:)
Если вы только что сделали фиксацию или хотите увидеть, что изменилось в последней фиксации по сравнению с текущим состоянием (при условии, что у вас есть чистое рабочее дерево), вы можете использовать:
git diff HEAD^
Это сравнит HEAD с предыдущей фиксацией. Можно также сделать
git diff HEAD^^
для сравнения с состоянием игры 2 коммита назад. Чтобы увидеть разницу между текущим состоянием и определенной фиксацией, просто выполните:
git diff b6af6qc
Где b6af6qcпример хеша коммита.
HEAD^это фиксация перед последней фиксацией.
Вы просите git различать текущую / последнюю фиксацию, что имеет сокращение HEAD.
Таким образом, git diff HEADмы сравним текущее состояние рабочего дерева с текущим коммитом.
это также показывает разницу и какие файлы были изменены / модифицированы.
$ git status
Отображает пути, которые имеют различия между индексным файлом и текущим фиксацией HEAD, пути, которые имеют различия между рабочим деревом и индексным файлом, а также пути в рабочем дереве, которые не отслеживаются git (и не игнорируются gitignore (5) ). Первый - это то, что вы бы зафиксировали, запустив git commit; второй и третий - это то, что вы можете зафиксировать, запустив git add перед запуском git commit.
https://www.kernel.org/pub/software/scm/git/docs/git-status.html
Это также работает для меня:
# The last one
git diff HEAD~1 HEAD
# The last but one, etc...
git diff HEAD~2 HEAD~1
Обычно это работает для линейной истории. Это может стать более сложным, если есть также коммиты слияния. Я рекомендую вам заглянуть в этот документ, чтобы получить хорошее и полное объяснение, особенно пример иллюстрации дерева коммитов:
git diffсравнивает рабочее дерево с индексом, а не с HEAD.