git log と History Simplification
Published: 2023/4/4
git log
コマンドは、その本質的な操作として、
- 対象コミット集合の指定
- History Simplification の適用
- 整形して出力
の 3 ステップで動作する。
対象コミット集合
git log
はそのメインの引数に、コミット集合を表す revision-range を期待する。
Revision range の記法については、 gitrevisions というそれ用の資料がある。
例えば、 rev1..rev2
は、 rev2 ^rev1
の syntax sugar である。
History Simplification
- paths の指定による簡略化
--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
関連記事
magit で worktree を checkout する方法
2023/4/11
Github における ssh 接続の認証認可の制約とその対処
2022/9/4