Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Знакомство с git log Основы Git

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Рекомендуем перейти в курс Введение в Git

Мы обновили этот курс — добавили новые темы, самостоятельные задания и практические упражнения. Посмотрите этот урок по ссылке: https://ru.hexlet.io/courses/intro_to_git/lessons/inspect/theory_unit


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

Здравствуйте!

Сегодня мы поговорим про историю коммитов, а точнее о том, как с ней работать.

После того как вы создадите несколько коммитов, или же вы склонируете репозиторий с уже существующей историей коммитов, вы, вероятно, захотите оглянуться назад и узнать, что же происходило с этим репозиторием. Наиболее простой и в то же время мощный инструмент для этого — команда git log.

Вообще, команда git log может применяться не только для того, чтобы отобразить коммиты, которые были выполнены ранее. Однако, я сегодня буду рассматривать только возможность просмотреть историю коммитов. Про другие особенности мы поговорим отдельно.

Для знакомства с git log предлагаю склонировать репозиторий и выполнять приводимые мной команды в директории этого репозитория.

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

git clone git://github.com/zzet/persey.git

После этого перейдите в директорию склонированного репозитория:

cd persey

В результате выполнения git log в данном проекте, вы должны получить что-то вроде этого:

git log

commit cee7babd9b647789ae7c7aecdfd3e83a3b1567f4
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:48:39 2014 +0400

    Bump version

commit b6783a06ba03f01ee510215bfa7cecdfa2889c05
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:47:06 2014 +0400

    Update Readme

commit 0a2ef97b0e56d2398dc669efcde004d3bf000a5e
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:46:36 2014 +0400

    Do not replace params

commit 6746329ebaf2fab0555e1d16c79b50e523f94496
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Fri Jan 31 00:08:00 2014 +0400

    Update gem version in Readme

commit d5474572f18d1419c1d5c37c8146cdf51b5799b7
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Fri Jan 31 00:07:02 2014 +0400

    bump gem version to 0.0.7

commit af74b1915db6f372661542a60885be6786b53620
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Fri Jan 31 00:06:40 2014 +0400

    update generator

commit 7cfd1309730f3d89c56766e13fb74c0aa4bc037a
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Fri Jan 31 00:01:07 2014 +0400

    bump toml to 0.1.0

По умолчанию, без аргументов, git log выводит список коммитов созданных в данном репозитории в обратном хронологическом порядке. То есть самые последние коммиты показываются первыми. Как вы можете видеть, эта команда отображает каждый коммит вместе с его контрольной суммой SHA-1, именем и электронной почтой автора, датой создания и комментарием.

Существует превеликое множество параметров команды git log и их комбинаций, для того чтобы показать вам именно то, что вы ищете. Здесь я покажу вам несколько наиболее часто применяемых.

Один из наиболее полезных параметров — это -p, который показывает дельту (разницу/diff), привнесенную каждым коммитом. Вы также можете использовать -2, что ограничит вывод до 2-х последних записей:

git log -p -2

commit cee7babd9b647789ae7c7aecdfd3e83a3b1567f4
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:48:39 2014 +0400

    Bump version

diff --git a/lib/persey/version.rb b/lib/persey/version.rb
index e3925a5..da23f6a 100644
--- a/lib/persey/version.rb
+++ b/lib/persey/version.rb
@@ -1,3 +1,3 @@
 module Persey
-  VERSION = "0.0.7"
+  VERSION = "0.0.8"
 end

commit b6783a06ba03f01ee510215bfa7cecdfa2889c05
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:47:06 2014 +0400

    Update Readme

diff --git a/README.md b/README.md
index e6a90b5..ef6c76e 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@

 ## Summary

-Persey help you easily manage the configuration, depending on the environment.
+Persey help you easily manage the configuration, depending on the environment.
 The main objective is to provide opportunities to reuse the
 configuration provided by the project, as the default configuration.

@@ -11,12 +11,12 @@ configuration provided by the project, as the default configuration.

 For the occurrence of the gem was a few prerequisites.

- * Work on opensource projects that support the relevance of problem configurations, changing the appearance of new versions and functionality.
- * Use in the project configuration, diversity in different files, and the inability to unite all in one configuration
+ * Work on opensource projects that support the relevance of problem configurations, changing the appearance of new versions and functionality.
+ * Use in the project configuration, diversity in different files, and the inability to unite all in one configuration
  * Desire to use sensitive data as easily as those that can be safely stored in the repository.
- * Sometimes configuration happens in a variety of formats: yaml, json, ini
+ * Sometimes configuration happens in a variety of formats: yaml, json, ini

-I do not want to engage in writing parsers, I want to work fine :)
+I do not want to engage in writing parsers, I want to work fine :)

 This solution allows to **accumulate** different configs in one, with the **possibility of reusability** of configuration options and **simple override**. It uses an **intuitive DSL**.

@@ -25,7 +25,7 @@ This solution allows to **accumulate** different configs in one, with the **poss
 Add this to your `Gemfile`:

-gem "persey", '>= 0.0.7'
+gem "persey", '>= 0.0.8'

 Generate default config file
@@ -90,9 +90,9 @@ Persey.init Rails.env do # set current environment
       # and now we use configs for our options, which are not declared in any config
       uri      -> { "#{protocol}://#{domain}:#{port}" }
     end
-
+
     site_uri   -> { web.uri }    # we can re-re-use different options
-
+
     email do
       pop do
         address 'pop.example.com'
@@ -135,7 +135,7 @@ module AppName
   def self.config
     Persey.config
   end
-
+
   class Application < Rails::Application
     # ...
   end

Этот параметр показывает ту же самую информацию, которую вы увидели, при выполнении команды git log, плюс внесённые изменения, отображаемые непосредственно после каждого коммита. Это очень удобно для инспекций кода или для того, чтобы быстро посмотреть, что происходило в результате последовательности коммитов, добавленных вами или коллегой.

В некоторых ситуациях гораздо удобней просматривать внесённые изменения на уровне слов, а не на уровне строк. Чтобы получить дельту по словам вместо обычной дельты по строкам, нужно дописать после команды git log -p опцию --word-diff. Дельты на уровне слов практически бесполезны при работе над программным кодом, но они буду очень кстати при работе над длинным текстом, таким как книга или диссертация. Рассмотрим пример:

git log -U1 --word-diff -2

commit cee7babd9b647789ae7c7aecdfd3e83a3b1567f4
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:48:39 2014 +0400

    Bump version

diff --git a/lib/persey/version.rb b/lib/persey/version.rb
index e3925a5..da23f6a 100644
--- a/lib/persey/version.rb
+++ b/lib/persey/version.rb
@@ -1,3 +1,3 @@
module Persey
  VERSION = [-"0.0.7"-]{+"0.0.8"+}
end

commit b6783a06ba03f01ee510215bfa7cecdfa2889c05
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:47:06 2014 +0400

    Update Readme

diff --git a/README.md b/README.md
index e6a90b5..ef6c76e 100644
--- a/README.md
+++ b/README.md
@@ -5,3 +5,3 @@

Persey help you easily manage the configuration, depending on the environment.
The main objective is to provide opportunities to reuse the
@@ -13,8 +13,8 @@ For the occurrence of the gem was a few prerequisites.

 * Work on opensource projects that support the relevance of problem configurations, changing the appearance of new versions and functionality.
 * Use in the project configuration, diversity in different files, and the inability to unite all in one configuration
 * Desire to use sensitive data as easily as those that can be safely stored in the repository.
 * Sometimes configuration happens in a variety of formats: yaml, json, ini

I do not want to engage in writing parsers, I want to work fine :)

@@ -27,3 +27,3 @@ Add this to your 'Gemfile':

gem "persey", '>= [-0.0.7-]{+0.0.8+}'

@@ -92,5 +92,5 @@ Persey.init Rails.env do # set current environment
    end

    site_uri   -> { web.uri }    # we can re-re-use different options

    email do
@@ -137,3 +137,3 @@ module AppName
  end

  class Application < Rails::Application

Как видите, в этом выводе нет ни добавленных, ни удалённых строк, как для обычного diff'а. Вместо этого изменения показаны внутри строки. Добавленное слово заключено в {+ +}, а удалённое в [- -].

Также может быть полезно сократить обычные три строки контекста в выводе команды diff до одной строки, так как контекстом в данном случае являются слова, а не строки. Сделать это можно с помощью опции -U1.

С командой git log вы также можете использовать группы суммирующих параметров. Например, если вы хотите получить некоторую краткую статистику по каждому коммиту, вы можете использовать параметр --stat:

git log --stat

commit cee7babd9b647789ae7c7aecdfd3e83a3b1567f4
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:48:39 2014 +0400

    Bump version

 lib/persey/version.rb |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit b6783a06ba03f01ee510215bfa7cecdfa2889c05
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:47:06 2014 +0400

    Update Readme

 README.md |   18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

commit 0a2ef97b0e56d2398dc669efcde004d3bf000a5e
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:46:36 2014 +0400

    Do not replace params

 lib/persey/builder.rb   |    2 +-
 test/lib/persey_test.rb |    7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

commit 6746329ebaf2fab0555e1d16c79b50e523f94496
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Fri Jan 31 00:08:00 2014 +0400

    Update gem version in Readme

 README.md |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit d5474572f18d1419c1d5c37c8146cdf51b5799b7
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Fri Jan 31 00:07:02 2014 +0400

    bump gem version to 0.0.7

 lib/persey/version.rb |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit af74b1915db6f372661542a60885be6786b53620
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Fri Jan 31 00:06:40 2014 +0400

    update generator

Как видно из лога, параметр --stat выводит под каждым коммитом список изменённых файлов, количество изменённых файлов, а также количество добавленных и удалённых строк в этих файлах. Он также, как и при использовании опции -p, выводит сводную информацию в конце, после каждого коммита.

Другой, действительно полезный параметр — это --pretty. Он позволяет изменить формат вывода лога. Для вас доступны несколько предустановленных вариантов, с которыми вы сможете ознакомиться в справке по команде.

Например, параметр oneline выводит каждый коммит в одну строку, что удобно если вы просматриваете большое количество коммитов. В дополнение к этому, параметры short, full, и fuller, практически не меняя формат вывода, позволяют выводить меньше или больше деталей соответственно:

git log --pretty=oneline

cee7babd9b647789ae7c7aecdfd3e83a3b1567f4 Bump version
b6783a06ba03f01ee510215bfa7cecdfa2889c05 Update Readme
0a2ef97b0e56d2398dc669efcde004d3bf000a5e Do not replace params
6746329ebaf2fab0555e1d16c79b50e523f94496 Update gem version in Readme
d5474572f18d1419c1d5c37c8146cdf51b5799b7 bump gem version to 0.0.7
af74b1915db6f372661542a60885be6786b53620 update generator
7cfd1309730f3d89c56766e13fb74c0aa4bc037a bump toml to 0.1.0
4339eb1e1c6105b787b4960be214eff4d0d9aa50 Add support ini configs
0381aa847651ce7cb601475072532bdb28ef0e41 Add mention about supported formats
5b17044529f4d958d691feae4362a8cb4764ca76 Remove support jruby and add 1.9.3
3885dede437a0360f4f2eed2fcafe0c99e16af36 Add support toml configs
0af81e63bbd1d606552c69e5987409baafecef25 Add json sample in Readme
9d4f03610a9fb0d9bfbb3f13332039ff60a12e14 Add json config support
5c709f152442328be3d2e511559c8019b6a894b6 Fix Readme
be9d9697da655f451e7c6c120961f43d1d321d70 Update README.md
ef3e2cee31bbdb2f9eefd9fe91451e6f43474dc9 Update Readme
557e8c323134c7a8ab722197ad54f45dad4b9aeb Update rails generator
cc112a5cb9ba1c2cb750aed25036d4c8a485aa31 Add generators for rails
3418acdd79a3706b070094ae2052546d9f7c40b5 Update readme
94e7daf1a3e1a8f9ab006028d36c873fb861a6f5 bunp to 0.0.6
f1315e4206e27569047920c683046a2ed4e19e50 Correct reuse of configs
b8bb1c2557f182903d102b0a2e21167c2e626d94 bump 0.0.5
392ec34c9eda9ebd8823e088a3ff7c6bd0e0b952 fix
125c2d6f8c73b4c2a2880944120d2ccff8cc62af bump to 0.0.4
bd80643c50980476495a185e8d17974cc6363315 bump to 0.0.3
ce8f56b49e8606c25058bb35748f2b7aabc81edb update gems
0726556a05ae52a78113b6e051a9d82de369b9ed Move bitdeli badge top
61ec2459d3ee3ff56b82b271ddb96435b7b7faf6 Merge pull request #1 from bitdeli-chef/master
d343768ff33279a445d4df93d231559e1d8e7a10 Add a Bitdeli badge to README
ee81655bdc6903bb17e1fdd02e2e31f22e4c3c59 Add configus dependency correct
c148349868366351bf934252f3c49f0ad86b7ed9 bump version to 0.0.2
8826cc1d2690123f97ac6fe84e2562754fb03dc7 Work only with sym at begining
d587f91592ad69be851ae3f917ed0fa59334ef52 Add Code Climate badge
68d2009bcaa34dfe4442930ae977a7c542118437 Add Dependency Status badge
7d2d8057fd44e76687ffecfc2681c4c3fca0fe7b Add gem version badge
ed4677690a8b5fedd08a83dee5f4e2f0fb50266f Add jruby to travis
48c90a15ac61162da1d570394dd0d414d104ef21 Add travis badge
5286236531b61aa6ca03e665071960b4d28b07ff Add travis
92c9548482e5c39e64f390a53d039bda198580aa Init

Наиболее интересный параметр — это format, который позволяет вам полностью создать собственный формат вывода лога. Это особенно полезно, когда вы создаёте отчёты для автоматического разбора (парсинга) — поскольку вы явно задаёте формат и уверены в том, что он не будет изменяться при обновлениях Git'а:

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

cee7bab - Andrew Kumanyaev, 5 months ago : Bump version
b6783a0 - Andrew Kumanyaev, 5 months ago : Update Readme
0a2ef97 - Andrew Kumanyaev, 5 months ago : Do not replace params
6746329 - Andrey Kumanyaev, 1 year, 1 month ago : Update gem version in Readme
d547457 - Andrey Kumanyaev, 1 year, 1 month ago : bump gem version to 0.0.7
af74b19 - Andrey Kumanyaev, 1 year, 1 month ago : update generator
7cfd130 - Andrey Kumanyaev, 1 year, 1 month ago : bump toml to 0.1.0
4339eb1 - Andrey Kumanyaev, 1 year, 1 month ago : Add support ini configs
0381aa8 - Andrey Kumanyaev, 1 year, 1 month ago : Add mention about supported formats
5b17044 - Andrey Kumanyaev, 1 year, 1 month ago : Remove support jruby and add 1.9.3
3885ded - Andrey Kumanyaev, 1 year, 1 month ago : Add support toml configs
0af81e6 - Andrey Kumanyaev, 1 year, 1 month ago : Add json sample in Readme
9d4f036 - Andrey Kumanyaev, 1 year, 1 month ago : Add json config support
5c709f1 - Andrew Kumanyaev, 1 year, 1 month ago : Fix Readme
be9d969 - Andrew Kumanyaev, 1 year, 1 month ago : Update README.md
ef3e2ce - Andrew Kumanyaev, 1 year, 1 month ago : Update Readme
557e8c3 - Andrey Kumanyaev, 1 year, 1 month ago : Update rails generator
cc112a5 - Andrey Kumanyaev, 1 year, 1 month ago : Add generators for rails
3418acd - Andrew Kumanyaev, 1 year, 1 month ago : Update readme
94e7daf - Andrey Kumanyaev, 1 year, 1 month ago : bunp to 0.0.6
f1315e4 - Andrey Kumanyaev, 1 year, 1 month ago : Correct reuse of configs
b8bb1c2 - Andrey Kumanyaev, 1 year, 1 month ago : bump 0.0.5
392ec34 - Andrey Kumanyaev, 1 year, 1 month ago : fix
125c2d6 - Andrey Kumanyaev, 1 year, 1 month ago : bump to 0.0.4
bd80643 - Andrey Kumanyaev, 1 year, 1 month ago : bump to 0.0.3
ce8f56b - Andrey Kumanyaev, 1 year, 1 month ago : update gems
0726556 - Andrew Kumanyaev, 1 year, 1 month ago : Move bitdeli badge top
61ec245 - Andrew Kumanyaev, 1 year, 1 month ago : Merge pull request #1 from bitdeli-chef/master
d343768 - Bitdeli Chef, 1 year, 1 month ago : Add a Bitdeli badge to README
ee81655 - Andrey Kumanyaev, 1 year, 1 month ago : Add configus dependency correct
c148349 - Andrey Kumanyaev, 1 year, 1 month ago : bump version to 0.0.2
8826cc1 - Andrey Kumanyaev, 1 year, 1 month ago : Work only with sym at begining
d587f91 - Andrew Kumanyaev, 1 year, 1 month ago : Add Code Climate badge
68d2009 - Andrew Kumanyaev, 1 year, 1 month ago : Add Dependency Status badge
7d2d805 - Andrew Kumanyaev, 1 year, 1 month ago : Add gem version badge
ed46776 - Andrew Kumanyaev, 1 year, 1 month ago : Add jruby to travis
48c90a1 - Andrew Kumanyaev, 1 year, 1 month ago : Add travis badge
5286236 - Andrew Kumanyaev, 1 year, 1 month ago : Add travis
92c9548 - Andrey Kumanyaev, 1 year, 1 month ago : Init

На экране вы видите список наиболее полезных, или популярных, параметров формата.

Параметр    Описание выводимых данных
%H          Хеш коммита
%h          Сокращённый хеш коммита
%T          Хеш дерева
%t          Сокращённый хеш дерева
%P          Хеши родительских коммитов
%p          Сокращённые хеши родительских коммитов
%an         Имя автора
%ae         Электронная почта автора
%ad         Дата автора (формат соответствует параметру `--date=`)
%ar         Дата автора, относительная (пр. "2 мес. назад")
%cn         Имя коммитера
%ce         Электронная почта коммитера
%cd         Дата коммитера
%cr         Дата коммитера, относительная
%s          Комментарий

Вас может заинтересовать, в чём же разница между автором и коммитером. Автор — это человек, изначально сделавший работу, тогда как коммитер — это человек, который последним применил эту работу. Так что если вы послали патч в проект и один из основных разработчиков применил этот патч, вы оба не будете забыты — вы как автор, а разработчик как коммитер.

Параметры oneline и format также удобно применять совместно с другим параметром команды log. Например, используем их совместно с опцией --graph. Опция --graph добавляет ASCII-граф, показывающий историю ветвлений и слияний.

git log --pretty=format:"%h %s" --graph

* cee7bab Bump version
* b6783a0 Update Readme
* 0a2ef97 Do not replace params
* 6746329 Update gem version in Readme
* d547457 bump gem version to 0.0.7
* af74b19 update generator
* 7cfd130 bump toml to 0.1.0
* 4339eb1 Add support ini configs
* 0381aa8 Add mention about supported formats
* 5b17044 Remove support jruby and add 1.9.3
* 3885ded Add support toml configs
* 0af81e6 Add json sample in Readme
* 9d4f036 Add json config support
* 5c709f1 Fix Readme
* be9d969 Update README.md
* ef3e2ce Update Readme
* 557e8c3 Update rails generator
* cc112a5 Add generators for rails
* 3418acd Update readme
* 94e7daf bunp to 0.0.6
* f1315e4 Correct reuse of configs
* b8bb1c2 bump 0.0.5
* 392ec34 fix
* 125c2d6 bump to 0.0.4
* bd80643 bump to 0.0.3
* ce8f56b update gems
* 0726556 Move bitdeli badge top
*   61ec245 Merge pull request #1 from bitdeli-chef/master
|\
| * d343768 Add a Bitdeli badge to README
|/
* ee81655 Add configus dependency correct
* c148349 bump version to 0.0.2
* 8826cc1 Work only with sym at begining
* d587f91 Add Code Climate badge
* 68d2009 Add Dependency Status badge
* 7d2d805 Add gem version badge
* ed46776 Add jruby to travis
* 48c90a1 Add travis badge
* 5286236 Add travis
* 92c9548 Init

Мы рассмотрели только самые простые параметры форматирования вывода команды git log. Как я уже сказал - их гораздо больше. Ниже приведены как уже рассмотренные нами параметры, так и другие полезные параметры вместе с описанием того, как они влияют на вывод команды git log.

Параметр        Описание
-p              Для каждого коммита показывать дельту внесённых им изменений.
--word-diff     Показывать изменения на уровне слов.
--stat          Для каждого коммита дополнительно выводить статистику по изменённым файлам.
--shortstat     Показывать только строку changed/insertions/deletions от вывода с опцией `--stat`.
--name-only     Показывать список изменённых файлов после информации о коммите.
--name-status   Выводить список изменённых файлов вместе с информацией о добавлении/изменении/удалении.
--abbrev-commit Выводить только первые несколько символов контрольной суммы SHA-1 вместо всех 40.
--relative-date Выводить дату в относительном формате (например, "2 weeks ago") вместо полной даты.
--graph         Показывать ASCII-граф истории ветвлений и слияний рядом с выводом лога.
--pretty        Отображать коммиты в альтернативном формате. Возможные параметры: `oneline`, `short`, `full`, `fuller` и `format` (где вы можете указать свой собственный формат).

Ограничение вывода команды log

Кроме опций для форматирования вывода, git log имеет ряд полезных ограничительных параметров, то есть параметров, которые дают возможность отобразить часть коммитов. Вы уже видели один из таких параметров — параметр -2, который отображает только два последних коммита. На самом деле, эта опция имеет вид -<n>, где n это количество отображаемых коммитов. На практике вам вряд ли придётся часто этим пользоваться потому, что по умолчанию Git через канал (pipe) отправляет весь вывод на pager, так что вы всегда будете видеть только одну страницу. Кстати, то, что Git отправляет весь лог через pipe может быть использован вами в других программих.

Вам могут также приглянуться параметры, ограничивающие историю по времени, такие как --since и --until. Например, следующая команда выдаёт список коммитов, сделанных за последние 5 месяцев:

git log --since=5.month

commit cee7babd9b647789ae7c7aecdfd3e83a3b1567f4
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:48:39 2014 +0400

    Bump version

commit b6783a06ba03f01ee510215bfa7cecdfa2889c05
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:47:06 2014 +0400

    Update Readme

commit 0a2ef97b0e56d2398dc669efcde004d3bf000a5e
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:46:36 2014 +0400

    Do not replace params

Такая команда может работать с множеством форматов — вы можете указать точную дату (“2008-01-15”) или относительную дату, такую как “2 years 1 day 3 minutes ago”.

Вы также можете отфильтровать список коммитов по какому-либо критерию поиска. Опция --author позволяет фильтровать по автору, опция --grep позволяет искать по ключевым словам в сообщении. (Заметим, что, если вы укажете и опцию author, и опцию grep, то будут найдены все коммиты, которые удовлетворяют первому ИЛИ второму критерию. Чтобы найти коммиты, которые удовлетворяют первому И второму критерию, следует добавить опцию --all-match.)

Последняя, действительно полезная, опция-фильтр для git log — это путь. Указав имя каталога или файла, вы ограничите вывод log теми коммитами, которые вносят изменения в указанные файлы. Эта опция всегда указывается последней и обычно предваряется двумя минусами (--), чтобы отделить пути от остальных опций.

git log lib/persey/version.rb

commit cee7babd9b647789ae7c7aecdfd3e83a3b1567f4
Author: Andrew Kumanyaev <me@zzet.org>
Date:   Wed Oct 8 19:48:39 2014 +0400

    Bump version

commit d5474572f18d1419c1d5c37c8146cdf51b5799b7
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Fri Jan 31 00:07:02 2014 +0400

    bump gem version to 0.0.7

commit 94e7daf1a3e1a8f9ab006028d36c873fb861a6f5
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Mon Jan 27 01:03:49 2014 +0400

    bunp to 0.0.6

commit b8bb1c2557f182903d102b0a2e21167c2e626d94
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Sun Jan 26 21:14:15 2014 +0400

    bump 0.0.5

commit 125c2d6f8c73b4c2a2880944120d2ccff8cc62af
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Sun Jan 26 21:00:06 2014 +0400

    bump to 0.0.4

commit bd80643c50980476495a185e8d17974cc6363315
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Sun Jan 26 20:36:40 2014 +0400

    bump to 0.0.3

commit c148349868366351bf934252f3c49f0ad86b7ed9
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Sat Jan 25 20:07:32 2014 +0400

    bump version to 0.0.2

commit 92c9548482e5c39e64f390a53d039bda198580aa
Author: Andrey Kumanyaev <me@zzet.org>
Date:   Sat Jan 25 04:40:42 2014 +0400

    Init

В таблице для справки приведён список часто употребляемых опций.

Опция              Описание
-(n)                Показать последние n коммитов
--since, --after    Ограничить коммиты теми, которые сделаны после указанной даты.
--until, --before   Ограничить коммиты теми, которые сделаны до указанной даты.
--author            Показать только те коммиты, автор которых соответствует указанной строке.
--committer         Показать только те коммиты, коммитер которых соответствует указанной строке.

Например, если вы хотите посмотреть из истории Git'а такие коммиты, которые вносят изменения в тестовые файлы, были сделаны Bitdeli Chef, вы можете выполнить что-то вроде такого:

git log --pretty="%h - %s" --author='Bitdeli Chef'

d343768 - Add a Bitdeli badge to README

Как вы уже поняли, у этой команды очень много различных опций. Если вы уже выполнили команду git log --help, то обратили внимание на их количество. Предлагаю вам внимательно прочесть справку по данной команде и, после этого, перейти к практическому заданию, пройти тест.

На этом я закончу этот урок. Спасибо за внимание!


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»