git show
Команда git show: просмотр коммитов, тегов и содержимого файлов в любой ревизии. Полезные опции и примеры использования.
Определение
Команда git show отображает подробную информацию об объекте Git — чаще всего о коммите. Для коммита она выводит сообщение лога вместе с полным diff изменений, давая полное представление об одной ревизии. Кроме того, она позволяет просматривать теги, деревья и содержимое файла в любой точке истории.
Используйте git show, когда вы уже знаете, какой объект вас интересует, и хотите увидеть всё о нём на одном экране. На этой странице рассматривается: отображение коммитов, чтение вывода, просмотр файла в любой ревизии, проверка тегов, наиболее полезные параметры, а также отличие команды от git log и git diff.
Просмотр коммита
Без аргументов git show отображает последний коммит (HEAD): его автора, дату, сообщение и внесённые изменения.
git showЧтобы проверить любой другой коммит, передайте его хэш, имя ветки или относительную ссылку:
git show a1b2c3d # by abbreviated hash
git show HEAD~2 # the commit two steps before HEAD
git show main # the tip of the main branch
git show HEAD@{1} # where HEAD pointed one move ago (via the reflog)Вывод объединяет то, что вы получили бы от git log и git diff для данного коммита.
Чтение вывода
Типичный вывод коммита содержит заголовок, за которым следует унифицированный diff:
commit a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
Author: Jane Dev <[email protected]m>
Date: Mon Jun 9 14:02:11 2025 +0200
Fix off-by-one error in pagination
diff --git a/src/page.js b/src/page.js
index 83db48f..f735c2e 100644
--- a/src/page.js
+++ b/src/page.js
@@ -10,7 +10,7 @@ function pageStart(page, perPage) {
- return page * perPage;
+ return (page - 1) * perPage;
}В заголовке указаны коммит, его автор и дата. Блок diff --git показывает изменения: строки, начинающиеся с -, были удалены, строки с + — добавлены, а заголовок блока @@ ... @@ сообщает номера затронутых строк. Это тот же формат патча, что используется в git diff.
Просмотр файла в определённой ревизии
Мощная возможность — вывести файл в том виде, в каком он существовал в заданном коммите, без фактического переключения на него. Используйте синтаксис <commit>:<path>:
git show HEAD~3:src/index.jsЭто выводит старую версию index.js в терминал, не затрагивая рабочее дерево — идеально для сравнения или копирования фрагмента из прошлого. Путь указывается от корня репозитория, а не от текущего каталога. Чтобы проверить проиндексированную версию файла, используйте двоеточие без имени коммита:
git show :src/index.js # the file as currently staged in the indexПроверка тегов
Когда вы указываете git show на аннотированный тег, команда выводит сообщение тега и информацию о его создателе, а затем — коммит, на который ссылается тег:
git show v1.0.0Это самый быстрый способ узнать, кто создал тег релиза и на что он указывает. О создании тегов читайте в разделе git tag. Лёгкий тег не имеет собственных метаданных, поэтому git show сразу переходит к отображению помеченного коммита.
Отображение нескольких объектов одновременно
git show принимает более одного аргумента и выводит каждый объект по очереди, начиная с самого нового. Это удобно для просмотра небольшого набора связанных коммитов без прокрутки всей истории:
git show HEAD HEAD~1 v1.0.0Полезные параметры
По умолчанию git show включает полный diff. Перечисленные ниже параметры позволяют сократить или преобразовать вывод:
git show --stat HEAD # summary of files changed and line counts
git show --name-only HEAD # just the changed file names
git show -s HEAD # suppress the diff; show only the commit message
git show --pretty=oneline HEAD # compact one-line header
git show --format="%an %s" -s HEAD # custom format: author name + subjectЗаполнители --format (и --pretty) общие с git log: %an — имя автора, %s — строка темы, %H — полный хэш, %ad — дата автора.
Основные команды
| Команда | Описание |
|---|---|
git show | Показывает последний коммит с полным diff. |
git show <commit> | Показывает конкретный коммит по хэшу, ветке или ссылке. |
git show <commit>:<file> | Выводит содержимое файла на момент указанного коммита. |
git show --stat <commit> | Суммирует, какие файлы изменились и на сколько строк. |
git show --name-only <commit> | Выводит только имена изменённых файлов. |
git show -s <commit> | Показывает только сообщение коммита без diff. |
git show <tag> | Показывает метаданные тега и коммит, на который он указывает. |
git show vs git log и git diff
Эти три команды частично пересекаются, но служат разным целям. git log обходит диапазон коммитов и предназначен для просмотра истории. git diff сравнивает два произвольных состояния. git show фокусируется на одном объекте и сообщает о нём всё — это естественный выбор, когда вы уже знаете, какой коммит вас интересует.
Типичный рабочий процесс: найти хэш коммита с помощью git log или git blame, а затем передать его в git show, чтобы прочитать полные изменения в деталях.