Git の基本 | git log

git log コマンド

git log はコミット済みのスナップショットを表示するコマンドである。このコマンドを使うと、コミット履歴を絞り込んだり、特定の変更を検索したりできる。git status が作業ディレクトリとステージング領域の状態を確認するためのコマンドであるのに対し、git log はコミット済みの履歴だけを対象にする。

Git チュートリアル: git statusgit log

ログ出力は、単純なコミット履歴の絞り込み表示から、完全にカスタマイズした形式まで幅広く指定できる。以下では、git log でよく使われる設定例を紹介する。

使い方

git log

コミット履歴全体をデフォルト形式で表示する。出力が 2 ページ以上にわたる場合は Space キーでスクロールできる。終了するには q を入力する。

git log -n <limit>

表示するコミット数を <limit> に制限する。たとえば git log -n 3 を実行すると、表示されるコミット数は 3 件になる。

git log --oneline

各コミットの内容を 1 行に圧縮して表示する。コミット履歴を手早く確認したい場合に適している。

git log --stat

通常の git log 情報に加えて、変更されたファイルと、その中で追加・削除された行数を表示する。

git log -p

各コミットのパッチを表示する。コミット履歴から得られる最も詳細な情報である、各コミットの完全な差分を確認できる。

git log --author="<pattern>"

特定の作者が作成したコミットを検索する。<pattern> には通常のテキストまたは正規表現を指定できる。

git log --grep="<pattern>"

コミットメッセージが <pattern> に一致するコミットを検索する。<pattern> には通常のテキストまたは正規表現を指定できる。

git log <since>..<until>

<since><until> の間にあるコミットだけを表示する。2 つの引数には、コミット ID、ブランチ名、HEAD、その他のバージョン参照を指定できる。

git log <file>

指定したファイルを含むコミットだけを表示する。特定ファイルの履歴を調べるときに便利である。

git log --graph --decorate --oneline

いくつかの便利なオプションを組み合わせた例である。--graph はコミットメッセージの左側にテキストベースのコミット履歴グラフを描画する。--decorate は表示されるコミットにブランチ名やタグ名を追加する。--oneline はコミット情報を 1 行に圧縮するため、履歴の概要を把握しやすい。

補足説明

git log は Git でコミット履歴を調べるための基本的なツールである。このコマンドを使うと、プロジェクトの特定バージョンを探したり、機能ブランチをマージしたときに何が変わるかを理解したり、問題のある変更がどこで入ったかを調べたりできる。

commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7
Author: John Smith

ほとんどの情報は直感的に理解できるが、最初の行には説明が必要である。commit に続く 40 文字の文字列は、コミット内容の SHA-1 チェックサムである。これには 2 つの目的がある。第一に、コミットの完全性を保証する。コミットが破損していれば、別のチェックサムが生成される。第二に、コミットの一意な ID として機能する。

この ID は git log <since>..<until> のようなコマンドで使用でき、特定のコミットを指定できる。たとえば git log 3157e..5ab91 を実行すると、3157e5ab91 の間にあるすべてのコミットを表示する。チェックサム以外に個別のコミットを指定する一般的な方法として、ブランチ名や HEAD キーワードも使える。HEAD は、ブランチ上であっても特定のコミット上であっても、常に現在のコミットを指す。

~ 文字は親コミットを相対的に参照するときに使う。たとえば 3157e~13157e の 1 つ前の親コミットを指し、HEAD~3 は現在のコミットから 3 つ前のコミットを意味する。

このような指定方法が用意されているのは、多くの Git 操作が特定のコミットを対象に実行されるためである。git log は操作対象となるコミットを見つける手段を提供するため、そのような作業の出発点になることが多い。

使用例

使い方の節では git log の例をいくつも紹介したが、1 つのコマンドに複数のオプションを組み合わせて指定できる点に注意しよう。

git log --author="John Smith" -p hello.py

このコマンドを実行すると、John Smith が hello.py に加えたすべての変更の差分を表示する。

.. 構文はブランチを比較する場合によく使われる。次の例は、some-feature ブランチにあり、master ブランチにはないすべてのコミットを表示する。

git log --oneline master..some-feature