Просмотр истории коммитов в Git
Изучение истории коммитов — важная составляющая работы с репозиторием. Увы, ввиду ветвления с этой историей не всегда просто разобраться. Обычно я для этой цели пользуюсь различными визуальными оболочками, но не всегда есть такая возможность. Временами приходится пользоваться средствами консоли, а именно командой git log. Основы работы с этой командой можно почитать в чудесной книге ProGit . git log имеет множество различных полезных параметров. Рассмотрим несколько примеров их использования.
Древовидный вид
Выводим полный граф коммитов c сокращёнными хешами, ссылками на коммиты и относительной датой. Используемый формат: синий сокращённый хеш коммита, зелёная дата, белые сообщение и автор, жёлтые ссылки на коммит.
Выводим полный граф коммитов c сокращёнными хешами, ссылками на коммиты и абсолютной датой. Используемый формат: синий сокращённый хеш коммита, голубая абсолютная дата, зелёная относительная дата, жёлтые ссылки на коммит, перевод строки, белые сообщение и автор.
Выводим полный граф коммитов, отводя по одной строке на коммит.
--all --dateВыводим полный граф коммитов c сортировкой по дате, отображаемой в краткой форме. Используемый формат: сокращённый хеш, дата, автор, зелёные ссылки на коммит, сообщение.
Линейный вид
Вывод списка коммитов с параметрами по умолчанию.
Выводим список коммитов и показываем diff для каждого.
Выводим список коммитов и показываем статистику по каждому.
Выводим список коммитов по одному на строчке.
Выводим список коммитов с использованием следуюещго формата: сокращённый хеш коммита, автор, относительная дата, сообщение.
Визуальный интерфейс
Если есть возможность, то всё таки коммиты приятнее изучать через специализированный интерфейс, а не из консоли. Лично я очень люблю 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».
Ссылки
- Официальный мануал
- ProGit
- Советы со Stackoverflow
- Репозиторий Twitter bootstrap
- GitHub
- RSS
2.3 Основы Git — Просмотр истории коммитов
После того, как вы создали несколько коммитов или же клонировали репозиторий с уже существующей историей коммитов, вероятно вам понадобится возможность посмотреть что было сделано — историю коммитов. Одним из основных и наиболее мощных инструментов для этого является команда git log .
Следующие несколько примеров используют очень простой проект «simplegit». Чтобы клонировать проект, используйте команду:
$ git clone https://github.com/schacon/simplegit-progit
Если вы запустите команду git log в каталоге клонированного проекта, вы увидите следующий вывод:
$ git log commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon Date: Mon Mar 17 21:52:11 2008 -0700 Change version number commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon Date: Sat Mar 15 16:40:33 2008 -0700 Remove unnecessary test commit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon Date: Sat Mar 15 10:31:28 2008 -0700 Initial commit
По умолчанию (без аргументов) git log перечисляет коммиты, сделанные в репозитории в обратном к хронологическому порядке — последние коммиты находятся вверху. Из примера можно увидеть, что данная команда перечисляет коммиты с их SHA-1 контрольными суммами, именем и электронной почтой автора, датой создания и сообщением коммита.
Команда git log имеет очень большое количество опций для поиска коммитов по разным критериям. Рассмотрим наиболее популярные из них.
Одним из самых полезных аргументов является -p или —patch , который показывает разницу (выводит патч), внесённую в каждый коммит. Так же вы можете ограничить количество записей в выводе команды; используйте параметр -2 для вывода только двух записей:
$ git log -p -2 commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon Date: Mon Mar 17 21:52:11 2008 -0700 Change version number diff --git a/Rakefile b/Rakefile index a874b73..8f94139 100644 --- a/Rakefile +++ b/Rakefile @@ -5,7 +5,7 @@ require 'rake/gempackagetask' spec = Gem::Specification.new do |s| s.platform = Gem::Platform::RUBY s.name = "simplegit" - s.version = "0.1.0" + s.version = "0.1.1" s.author = "Scott Chacon" s.email = "schacon@gee-mail.com" s.summary = "A simple gem for using Git in Ruby code." commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon Date: Sat Mar 15 16:40:33 2008 -0700 Remove unnecessary test diff --git a/lib/simplegit.rb b/lib/simplegit.rb index a0a60ae..47c6340 100644 --- a/lib/simplegit.rb +++ b/lib/simplegit.rb @@ -18,8 +18,3 @@ class SimpleGit end end - -if $0 == __FILE__ - git = SimpleGit.new - puts git.show -end
Эта опция отображает аналогичную информацию но содержит разницу для каждой записи. Очень удобно использовать данную опцию для код ревью или для быстрого просмотра серии внесённых изменений. Так же есть возможность использовать серию опций для обобщения. Например, если вы хотите увидеть сокращённую статистику для каждого коммита, вы можете использовать опцию —stat :
$ git log --stat commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon Date: Mon Mar 17 21:52:11 2008 -0700 Change version number Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon Date: Sat Mar 15 16:40:33 2008 -0700 Remove unnecessary test lib/simplegit.rb | 5 ----- 1 file changed, 5 deletions(-) commit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon Date: Sat Mar 15 10:31:28 2008 -0700 Initial commit README | 6 ++++++ Rakefile | 23 +++++++++++++++++++++++ lib/simplegit.rb | 25 +++++++++++++++++++++++++ 3 files changed, 54 insertions(+)
Как вы видите, опция —stat печатает под каждым из коммитов список и количество изменённых файлов, а также сколько строк в каждом из файлов было добавлено и удалено. В конце можно увидеть суммарную таблицу изменений.
Следующей действительно полезной опцией является —pretty . Эта опция меняет формат вывода. Существует несколько встроенных вариантов отображения. Опция oneline выводит каждый коммит в одну строку, что может быть очень удобным если вы просматриваете большое количество коммитов. К тому же, опции short , full и fuller делают вывод приблизительно в том же формате, но с меньшим или большим количеством информации соответственно:
$ git log --pretty=oneline ca82a6dff817ec66f44342007202690a93763949 Change version number 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Remove unnecessary test a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit
Наиболее интересной опцией является format , которая позволяет указать формат для вывода информации. Особенно это может быть полезным когда вы хотите сгенерировать вывод для автоматического анализа — так как вы указываете формат явно, он не будет изменен даже после обновления Git:
$ git log --pretty=format:"%h - %an, %ar : %s" ca82a6d - Scott Chacon, 6 years ago : Change version number 085bb3b - Scott Chacon, 6 years ago : Remove unnecessary test a11bef0 - Scott Chacon, 6 years ago : Initial commit
Полезные опции для git log —pretty=format отображает наиболее полезные опции для изменения формата.
Расширенный журнал Git
Любая система управления версиями предназначена для записи изменений в коде. Благодаря такой записи можно просмотреть историю проекта, чтобы узнать, кто и что сделал, выяснить, откуда появились баги, и отменить изменения, вызвавшие проблемы. Но чтобы воспользоваться этими данными, нужна возможность навигации по истории. Именно для этого и предназначена команда git log.
Вы уже наверняка освоили вывод коммитов с помощью команды git log. Теперь пора научиться передавать в git log дополнительные параметры для уточнения результатов.
Можно выделить две разновидности расширенных возможностей git log: форматирование представления каждого коммита и фильтрация коммитов в выводе. Вместе они позволяют найти в истории проекта любую интересующую вас информацию.
Форматирование вывода команды log
Прежде всего в этой статье мы рассмотрим множество способов отформатировать вывод команды git log . Для форматирования используются главным образом флаги, с помощью которых можно регулировать объем информации, предоставляемый командой git log .
Если вас не устраивает формат git log по умолчанию, то для любого из описанных ниже вариантов форматирования можно создать ярлык с помощью псевдонимов git config . О настройке псевдонимов читайте в разделе, посвященном команде git config.
Однострочный формат
Флаг —oneline записывает каждый коммит в одну строку. По умолчанию отображаются только идентификаторы коммитов и первые строки комментариев к ним. Типичный вывод git log —oneline выглядит следующим образом:
0e25143 Merge branch 'feature'
ad8621a Fix a bug in the feature
16b36c6 Add a new feature
23ad9ad Add the initial code base
Это позволяет получить общее представление о проекте.

Связанные материалы
Перемещение полного репозитория Git
СМ. РЕШЕНИЕ
Изучите Git с помощью Bitbucket Cloud
Ссылки
Часто бывает полезно узнать о том, с какими ветками или тегами связаны коммиты. Флаг —decorate добавляет в вывод команды git log все ссылки (ветки, теги и т. д.), указывающие на каждый коммит.
Этот флаг совместим с другими параметрами конфигурации. Так, с помощью команды git log —oneline —decorate можно отформатировать историю коммитов следующим образом:
0e25143 (HEAD, main) Merge branch 'feature'
ad8621a (feature) Fix a bug in the feature
16b36c6 Add a new feature
23ad9ad (tag: v0.9) Add the initial code base
Как видите, верхний коммит активен (отмечен указателем HEAD ) и находится на конце ветки main . На второй коммит указывает другая ветка, под названием feature . Наконец, четвертый коммит отмечен тегом v0.9 .
Ветки, теги, указатель HEAD и история коммитов — вот почти полный перечень информации, содержащейся в репозитории Git и дающей комплексное представление о его логической структуре.
Различия
В команду git log можно добавлять всяческие параметры для просмотра различий, вносимых коммитом. Два самых распространенных варианта — это —stat и -p .
Параметр —stat позволяет просмотреть количество вставок и удалений в каждом файле, который был изменен тем или иным коммитом. (Обратите внимание, что изменение строки записывается как одна вставка и одно удаление.) Такая запись полезна, когда нужен краткий обзор изменений, внесенных каждым коммитом. Например, следующий коммит добавил в файл hello.py 67 строк и удалил из него 38 строк:
commit f2a238924e89ca1d4947662928218a06d39068c3
Author: John
Date: Fri Jun 25 17:30:28 2014 -0500
Add a new feature
hello.py | 105 ++++++++++++++++++++++++-----------------
1 file changed, 67 insertion(+), 38 deletions(-)
Количество знаков « + » и « — » рядом с именем файла соответствует относительному количеству изменений, внесенных коммитом в файл. Эти сведения упрощают поиск изменений, соответствующих любому из коммитов.
Для просмотра содержимого изменений, внесенных каждым коммитом, передайте команде git log параметр -p . Вывод будет содержать полный патч коммита:
commit 16b36c697eb2d24302f89aa22d9170dfe609855b
Author: Mary
Date: Fri Jun 25 17:31:57 2014 -0500
Fix a bug in the feature
diff --git a/hello.py b/hello.py
index 18ca709..c673b40 100644
--- a/hello.py
+++ b/hello.py
@@ -13,14 +13,14 @@ B
-print("Hello, World!")
+print("Hello, Git!")
Если изменений в составе коммита много, вывод получится длинным, и с ним будет неудобно работать. Обычно из всего списка изменений в патче интересует какое-то конкретное. В таком случае воспользуйтесь параметром pickaxe.
Сводка по журналу
Команда git shortlog — специальная разновидность git log , предназначенная для написания объявлений о релизах. С ее помощью можно сгруппировать коммиты по автору и вывести первые строки всех комментариев к ним. Так сразу становится понятно, кто над чем работал.
Например, если два разработчика сделали пять коммитов в проект, вывод git shortlog может быть следующим:
Mary (2):
Fix a bug in the feature
Fix a serious security hole in our framework
John (3):
Add the initial code base
Add a new feature
Merge branch 'feature'
По умолчанию команда git shortlog сортирует выходные данные по имени автора, но их также можно отсортировать по количеству коммитов на автора, добавив параметр -n .
graphs
Параметр —graph используется для построения диаграммы из символов ASCII, отражающей структуру веток в истории коммитов. Обычно его используют в сочетании с командами —oneline и —decorate , чтобы обозначить связи между коммитами и ветками:
git log --graph --oneline --decorate
Ниже показан вывод команды для простого репозитория всего с двумя ветками:
* 0e25143 (HEAD, main) Merge branch 'feature'
|\
| * 16b36c6 Fix a bug in the new feature
| * 23ad9ad Start a new feature
* | ad8621a Fix a critical security issue
|/
* 400e4b7 Fix typos in the documentation
* 160e224 Add the initial code base
Звездочки показывают принадлежность коммитов к той или иной ветке. Так, мы видим, что коммиты 23ad9ad и 16b36c6 находятся в тематической ветке, а остальные — в ветке main .
Этот параметр хорош для наглядного представления простых репозиториев. Для проектов со сложной структурой веток лучше использовать полноценные средства визуализации, такие как gitk или Sourcetree.
Пользовательское форматирование
В остальных случаях для форматирования вывода git log можно использовать параметр —pretty=format:» » . Он позволяет отобразить коммиты так, как вам нужно, с помощью заполнителей типа printf .
Так, например, символы %cn , %h и %cd в следующей команде будут заменяться соответственно на имя разработчика, сокращенный хеш коммита и дату разработчика.
git log --pretty=format:"%cn committed %h on %cd"
Таким образом, каждый коммит примет следующий формат:
John committed 400e4b7 on Fri Jun 24 12:30:04 2014 -0500 John committed 89ab2cf on Thu Jun 23 17:09:42 2014 -0500 Mary committed 180e223 on Wed Jun 22 17:21:19 2014 -0500 John committed f12ca28 on Wed Jun 22 13:50:31 2014 -0500
Весь список заполнителей можно посмотреть в разделе Pretty Formats (Форматы pretty) на странице руководства по команде git log .
С помощью параметра —pretty=format:» » удобно не только просматривать исключительно то, что вас интересует, но и передавать вывод git log другой команде.
Фильтрация истории коммитов
Научиться форматировать представление коммитов с помощью git log — только полдела. Нужно еще освоить перемещение по истории коммитов. Остаток этой статьи посвящен продвинутым способам поиска конкретных коммитов в истории проекта с помощью команды git log . Каждый из них можно сочетать с любым из параметров форматирования, описанных выше.
По количеству
Самый простой вариант фильтрации для git log — ограничить количество отображаемых коммитов. Если вас интересуют только последние несколько коммитов, нет необходимости просматривать все.
Выходные данные можно ограничить, добавив в git log параметр — . Так, следующая команда вернет только последние три коммита.
git log -3
По дате
Если вы ищете коммит, относящийся к определенному периоду, можно использовать флаги —after или —before , чтобы отфильтровать коммиты по дате. Оба флага принимают различные форматы даты в качестве параметра. Например, в вывод следующей команды попадут только коммиты, созданные после 1 июля 2014 года (включительно):
git log --after="2014-7-1"
Можно также передать команде относительные ссылки, например 1 week ago (1 неделю назад) или yesterday (вчера):
git log --after="yesterday"
Чтобы найти коммиты, созданные в промежутке между двумя датами, можно использовать оба флага, —before и —after , и указать соответствующие даты в качестве их значений. Так, для просмотра всех коммитов, добавленных с 1 по 4 июля 2014 года, используйте следующую команду:
git log --after="2014-7-1" --before="2014-7-4"
Если изменений в составе коммита много, вывод получится длинным, и с ним будет неудобно работать. Обычно из всего списка изменений в патче интересует какое-то конкретное. В таком случае воспользуйтесь параметром pickaxe.
По автору
Если вас интересуют только коммиты, созданные конкретным пользователем, воспользуйтесь флагом —author . Он принимает регулярные выражения и возвращает все коммиты, автор которых соответствует указанному значению. Если вы точно знаете, кого ищете, то вместо регулярного выражения можно использовать обычную строку:
git log --author="John"
Эта команда покажет все коммиты, в имени автора которых есть слово John (Джон). Точное совпадение необязательно — достаточно, чтобы имя содержало указанную фразу.
Можно также создавать сложные поисковые запросы с помощью регулярных выражений. Например, следующая команда позволит найти коммиты, автором которых является Mary (Мэри) или John (Джон).
git log --author="John\|Mary"
Обратите внимание, что адрес электронной почты также относится к имени автора, поэтому этот параметр можно использовать и для поиска по адресу.
Если в вашем рабочем процессе роли авторов и разработчиков разделены, для поиска коммитов по именам разработчиков можно таким же образом использовать флаг —committer .
По комментарию
Для фильтрации коммитов по комментариям используется флаг —grep . Он работает точно так же, как флаг —author , описанный выше, только значения сопоставляются не с именем автора, а с комментарием к коммиту.
К примеру, если команда добавляет в комментарий к каждому коммиту соответствующие номера задач, можно использовать следующую команду для вывода всех коммитов, связанных с нужной задачей:
git log --grep="JRA-224:"
Можно также передать команде git log параметр -i : в этом случае различие в регистрах при сопоставлении будет игнорироваться.
По файлу
Иногда нужно найти только изменения, внесенные в конкретный файл. Чтобы просмотреть историю, связанную с файлом, достаточно указать путь к нему. Так, следующая команда вернет все коммиты, посредством которых был изменен файл foo.py или bar.py :
git log -- foo.py bar.py
Параметр « — » указывает команде git log на то, что последующие аргументы — это пути к файлам, а не имена веток. Если вы уверены, что перепутать путь с веткой невозможно, параметр « — » можно опустить.
По содержанию
Можно также искать коммиты, которые добавляют или удаляют определенную строку исходного кода. Эта операция называется pickaxe и задается выражением -S» » . Например, чтобы узнать, когда строка Hello, World! (Привет, мир!) была добавлена в любой из файлов проекта, используйте команду:
git log -S"Hello, World!"
Если вместо строки для поиска используется регулярное выражение, измените флаг на -G» » .
Это очень мощное средство отладки, поскольку с его помощью можно найти все коммиты, влияющие на отдельную строку кода. Можно даже узнать, когда строка была скопирована или перемещена в другой файл.
По диапазону
Чтобы просмотреть коммиты из определенного диапазона, укажите его в команде git log . Диапазон указывают в следующем формате, где и представляют собой ссылки на коммиты:
git log ..
Эта команда особенно полезна, если вы используете в качестве параметров ссылки на ветки, и позволяет без труда вывести различия между двумя ветками. Рассмотрим следующую команду:
git log main..feature
Диапазон main..feature включает все коммиты, принадлежащие к ветке feature , но не к ветке main . Иными словами, он показывает, что нового появилось в ветке feature с момента создания форка от ветки main . Наглядно это можно представить так:
Обратите внимание, что если поменять местами границы диапазона ( feature..main ), то будут выведены все коммиты, присутствующие в main , но отсутствующие в feature . Если команда git log возвращает коммиты для обоих рассмотренных диапазонов, значит, истории веток разошлись.
Фильтрация коммитов слияния
По умолчанию вывод git log включает коммиты слияния. Но если ваша команда придерживается политики «только слияние» (то есть объединяет восходящие изменения с тематическими ветками, вместо того чтобы перебазировать тематические ветки на вышестоящие), в истории проекта появляется много побочных коммитов слияния.
Эти коммиты слияния можно исключить из вывода git log , указав флаг —no-merges :
git log --no-merges
И наоборот, если вас интересуют только коммиты слияния, используйте флаг —merges :
git log --merges
Он возвращает все коммиты, у которых есть как минимум два родителя.
Резюме
Надеюсь, теперь вы сможете уверенно пользоваться расширенными параметрами git log для форматирования выходных данных и фильтрации отображаемых коммитов. Это позволит извлекать из истории проекта ровно то, что вам нужно.
Новые навыки станут важным дополнением к вашему инструментарию Git, однако не забывайте, что git log часто используют вместе с другими командами. Обычно найденный коммит передают команде git checkout , git revert или другому инструменту, позволяющему воздействовать на историю коммитов. Поэтому не останавливайтесь на достигнутом и продолжайте изучать расширенные возможности Git.
Анализ истории изменений — Введение в Git
Программирование — это не только написание новых программ, но и постоянный анализ уже написанного кода. Иногда код понятен и без слов — и это хороший код.
Но так происходит не всегда. Код может вызывать вопросы. Почему он написан именно так, кто его написал и когда.
Ответить на эти вопросы помогает история изменений. Хорошо сделанные коммиты имеют понятное описание, и каждый из них делает ровно одну законченную вещь — в таком случае история становится мощным инструментом для анализа кода. Именно поэтому так важно хорошо понимать философию Git и следовать лучшим практикам при работе с ним.
Git предоставляет целую пачку команд со множеством опций, позволяющих вытащить невероятное количество информации и показать все, что скрыто. С ними мы познакомимся в этом уроке.
Команда git log
Самая простая аналитика выполняется командой git log . Она показывает список всех выполненных коммитов, отсортированных по дате добавления. Сверху мы видим самые последние коммиты:
# Ниже неполный вывод истории проекта commit 5120bea3e5528c29f8d1da43731cbe895892eb6d Author: tirion Date: Thu Sep 17 18:04:19 2020 -0400 add new content commit e6f625cf8433c8b1f1aaed58cd2b437ec8a60f27 Author: tirion Date: Thu Sep 17 16:14:09 2020 -0400 add INFO.md commit 273f81cf2117044f1973ea80ce1067a94bea3f80 Author: tirion Date: Thu Sep 17 16:08:39 2020 -0400 remove NEW.md # Этот вывод показывается через пейджер
Из этого вывода мы можем узнать кто, когда и какие коммиты делал. Если коммиты оформлены хорошо, то по их описанию уже многое понятно. Оформление коммитов — отдельная тема, которую мы рассмотрим позже.
У команды git log есть полезный флаг -p , который сразу выводит диф для каждого коммита:
-p # Тут все коммиты с полным дифом # Промотать вперед — кнопка f, промотать назад — b # Выйти из режима просмотра — q
Команда git show
У каждого коммита есть уникальный набор символов — идентификатор (еще говорят «хеш»). С помощью хеша можно посмотреть все изменения, сделанные в рамках одного коммита:
# Тут выводится диф между этим коммитом и предыдущим diff --git a/INFO.md b/INFO.md index d5225f8..40f51f1 100644 --- a/INFO.md +++ b/INFO.md @@ -1 +1,2 @@ git is awesome! +new line diff --git a/README.md b/README.md index ffe7ece..00fd294 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -Hello, Hexlet! +Hello, Hexlet! How are you? # Здесь мы видим, что было изменено этим коммитом
Хеши коммитов в Git очень длинные, и ими бывает неудобно пользоваться. Поэтому разработчики Git добавили возможность указывать только часть хеша. Достаточно взять первые семь символов и подставить их в ту команду, которая работает с коммитами:
Чаще всего вам не придется высчитывать их самим. Большая часть команд Git выводит хеш коммита в сокращенном варианте, облегчая его использование. Такое упрощение хорошо работает, потому что даже первые семь символов будут всегда уникальными.
Команда git blame
А что если мы не знаем коммита, но нам интересно, кто последним менял конкретную строчку в файле? Для этого подойдет команда git blame . Эта команда выводит файл и рядом с каждой строчкой показывает того, кто ее менял и в каком коммите:
(tirion 2020-09-17 16:14:09 -0400 1) git is awesome! 5120bea3 (tirion 2020-09-17 18:04:19 -0400 2) new line
Важно помнить, что изменение строчки — не то же самое, что ее написание. Вполне возможно, что программист исправил небольшую опечатку, а саму строчку написал кто-то до него. Имея такой вывод, уже легко пойти дальше и изучить конкретный коммит.
Команда git grep
Команда git grep ищет совпадение с указанной строкой во всех файлах проекта. Это очень удобная команда для быстрого анализа из терминала. Она удобнее обычного grep , потому что знает про игнорирование и не смотрит в директорию .git, а еще умеет искать по истории:
grep line INFO.md:new line # Флаг `i` позволяет искать без учета регистра git grep -i hexlet README.md:Hello, Hexlet! How are you? # Поиск в конкретном коммите git grep Hexlet 5120bea # Поиск по всей истории # Возвращаем список хешей коммитов `rev-list` git grep Hexlet $(git rev-list --all)
GitHub
В простых ситуациях анализировать проект можно прямо на GitHub. Он позволяет просматривать историю коммитов, изменения в конкретном коммите и многое другое.
Самостоятельная работа
- Выполните все команды из урока в нашем репозитории
- Изучите историю репозитория ru-local-communities
Дополнительные материалы
- Просмотр истории коммитов
- Поиск ошибок
- Поиск по коду и истории
![]()
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Урок «Как эффективно учиться на Хекслете»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: