Просмотр истории коммитов в Git



Изучение истории коммитов — важная составляющая работы с репозиторием. Увы, ввиду ветвления с этой историей не всегда просто разобраться. Обычно я для этой цели пользуюсь различными визуальными оболочками, но не всегда есть такая возможность. Временами приходится пользоваться средствами консоли, а именно командой git log. Основы работы с этой командой можно почитать в чудесной книге ProGit . git log имеет множество различных полезных параметров. Рассмотрим несколько примеров их использования.

Древовидный вид

git log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all

Выводим полный граф коммитов c сокращёнными хешами, ссылками на коммиты и относительной датой. Используемый формат: синий сокращённый хеш коммита, зелёная дата, белые сообщение и автор, жёлтые ссылки на коммит.


git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all

Выводим полный граф коммитов c сокращёнными хешами, ссылками на коммиты и абсолютной датой. Используемый формат: синий сокращённый хеш коммита, голубая абсолютная дата, зелёная относительная дата, жёлтые ссылки на коммит, перевод строки, белые сообщение и автор.


git log --graph --oneline --all

Выводим полный граф коммитов, отводя по одной строке на коммит.


git log --graph --date-order --pretty=format:"<%h> %ad [%an] %Cgreen%d%Creset %s" --all --date=short

Выводим полный граф коммитов c сортировкой по дате, отображаемой в краткой форме. Используемый формат: сокращённый хеш, дата, автор, зелёные ссылки на коммит, сообщение.


Линейный вид

git log

Вывод списка коммитов с параметрами по умолчанию.


git log -p

Выводим список коммитов и показываем diff для каждого.


git log --stat

Выводим список коммитов и показываем статистику по каждому.


git log --pretty=oneline

Выводим список коммитов по одному на строчке.


git log --pretty=format:"%h - %an, %ar : %s"

Выводим список коммитов с использованием следуюещго формата: сокращённый хеш коммита, автор, относительная дата, сообщение.


Визуальный интерфейс

Если есть возможность, то всё таки коммиты приятнее изучать через специализированный интерфейс, а не из консоли. Лично я очень люблю GitExtensions:

Также удобно использовать встроенную утилиту gitk:

Полезные параметры

Все параметры команды git log не нужны, но некоторые самые полезные хорошо бы помнить. Приведу несколько примеров использования ходовых параметров.

  • --graph Показывать древовидную структуру графа истории в ASCII-виде
  • -5 Посмотреть последних пять коммитов
  • --skip=3 Пропустить три коммита
  • --pretty=oneline Отводить по одной строчке на коммит
  • --since="today" Показать коммиты за сегодня
  • --since=2.weeks Показать коммиты за последние две недели
  • -p Показывать diff каждого коммита
  • --decorate Показывать ссылки на этот коммит
  • --stat Показывать подробную статистику по каждому коммиту
  • --shortstat Показывать краткую статистику по каждому коммиту
  • --name-only Показывать список изменённых файлов
  • --name-status Показывать список изменённых файлов с информацией о них
  • --abbrev-commit Показывать только несколько первых цифр SHA-1
  • --relative-date Показывать дату в относительной форме

C помощью замечательного параметра --pretty=format:"" можно указать, какие именно данные о коммите нужно выводить, определив внутри кавычек общий паттерн, используя следующие обозначения:

  • %H Хеш коммита
  • %h Сокращённый хеш коммита
  • %d Имена ссылок на коммит
  • %s Сообщение к коммиту
  • %an Автор
  • %ad Дата автора
  • %cn Коммитер
  • %cd Дата коммитера
  • %Cred Переключить цвет на красный
  • %Cgreen Переключить цвет на зелёный
  • %Cblue Переключить цвет на синий
  • %Creset Сбросить цвет

Полный список обозначений можно найти в мануале , в разделе «PRETTY FORMATS».


Ссылки

Поделиться:
Исходный код поста находится на GitHub:
https://github.com/AndreyAkinshin/aakinshin.net/blob/master/ru/_posts/git/log.md