git log と History Simplification

Published: 2023/4/4


git log コマンドは、その本質的な操作として、

  1. 対象コミット集合の指定
  2. History Simplification の適用
  3. 整形して出力

の 3 ステップで動作する。

対象コミット集合

git log はそのメインの引数に、コミット集合を表す revision-range を期待する。 Revision range の記法については、 gitrevisions というそれ用の資料がある。

例えば、 rev1..rev2 は、 rev2 ^rev1 の syntax sugar である。

History Simplification

  1. paths の指定による簡略化
  2. --simplify-by-decoration による簡略化

の2つの方法がある。 両方とも、 TREE-SAME の概念により動作する。

TREE-SAME とは、例えば paths を指定していた場合、そのパスにあるファイルが具体的に変更されたかどうかによって、 TREE-SAME を判定する。 (変更がなければ TREE-SAME となる。) --simplify-by-decoration は、対象のコミットが、タグやブランチなどに指定されているかどうかを確認し、指定されていれば !TREE-SAME、されていなければ TREE-SAME として取り扱う。

特にマージコミットがある場合に、 TREE-SAME があった場合に、そもそもその ancestors を辿るのか、辿ったとして、それを出力していくのか、についての動作を制御できるようになっている。 細かい動作は git-log の公式マニュアル の History Simplification のセクションを見るのが良い。

整形からの出力

--graph--format などのオプションがこれに相当する。


Tags: git

関連記事