gitでlogをコミット履歴表示コマンドgit log
にはとてもたくさんのオプションが用意されています。
ここでは、特に複数人が共同で開発する場合に、コミット履歴をわかりやすくする便利オプションについてまとめています。
git logを劇的に見やすくする方法
完成例
git logはオプションを設定することで、以下のようにコミット履歴をわかりやすく表示することができます。
例えば、ブランチ毎のコミットの分岐状況が一番左側のラインで目視確認できるようにしたり、コミット番号のハッシュ値が赤色、コミットメッセージが白色、何日前に更新されたかが緑色、誰が変更したかを青色で色分けすることもできます。
見やすいコミット履歴の表示例
使い方
上記のようにする設定はとても簡単です。以下のコマンドを実行するだけです。
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
git logのオプションとして、「–graph」「–pretty」「–abbrev-commit」を使用しています。
以下で各オプションの意味について解説しています。
–graphとは何か?
git log --graph
を使うとコミットの流れをグラフで表示することができます。
一番左側にパイプ(|)や斜線が表示されています。
$ git log --graph
* commit 4f919da1d5b3f845d0b7310ccb6dd58c0f6503fa (HEAD -> master)
|\ Merge: 584476934 8fbf5ff50
| | Author: Sadick <sadickjunior@gmail.com>
| | Date: Fri Sep 11 21:44:31 2020 +0300
| |
| | Merge pull request #21193 from atom/fs-admin-0.15.0
| |
| | ⬆️ fs-admin@0.15.0
| |
| * commit 8fbf5ff503e002022f0d9df8cefdac19c4b83f5e
| | Author: runner <runner@Mac-1773.local>
| | Date: Thu Aug 20 03:11:49 2020 +0000
| |
| | :arrow_up: fs-admin@0.15.0
| |
* | commit 584476934785cf5a8df83f428912559e5eacc764
|\ \ Merge: e4701771b af6f4e67f
| | | Author: Musa Ibrahim <small_musa@hotmail.com>
| | | Date: Fri Sep 11 16:51:13 2020 +0100
主な表記は以下のようになります。
*
|\
エイリアスの設定
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
上記は非常に便利なコマンドですが、あまりにも長く毎回入力するのは非現実的です。
こういったコマンドは、エイリアス設定することでとても簡単に呼び出せるようになります。エイリアスとは「別名」という意味です。
以下コマンドを実行すれば、エイリアス名「git logg
」を設定します。これで「git logg
」のみですぐに呼び出せるようになります。
$ git config --global alias.logg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
–pretty=format:とは何か?
--pretty=format:~
は、prettyオプションでフォーマット(書式)を指定した記述です。
--pretty=format:~
を使うと、指定した場所の、色の指定や、文字・記号の挿入ができます。
ここでは以下のように指定しています。
--pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
%Cred%h%Creset
%Cred%h%Creset
はコミット番号のハッシュ値のフォーマットを指定しています。
%Cred
:色をredにする。%h
: ハッシュを省略形で表示%Creset
: 書式をリセット
%C(yellow)%d%Creset
%C(yellow)%d%Creset
は参照名のフォーマットを指定しています。
%C(yello)
:()で囲まれた部分の色を黄色にする%d
: 参照名を表示%Creset
: 書式をリセット
参照名とはコミット番号の横に表示されるカッコ ( ) で囲まれた領域です。例:(HEAD -> test, origin/main, main)
参照名の詳細については次項で解説しています。
%s
コミットメッセージを表示することを指定しています。フォーマットは指定しておらずデフォルトの白色のままです。
%s: コミットメッセージを表示
%Cgreen(%cr)
%Cgreen(%cr)
はコミットがいつ行われたかの日付(〇日前)のフォーマットを指定しています。
%Cgreen
: 緑色で表示( )
: カッコを表示-
%cr
: コミットの相対日付を表示(n days ago)
%C(bold blue)<%an>%Creset
%C(bold blue)<%an>%Creset
はコミットした人の名前のフォーマットを指定しています。
%C(bold blue)
: 太字・青色で表示-
< >
: カッコを表示(大なりと小なりを表示) %an
: 作業者名を表示 (author name)%Creset
: 書式リセット
参照名(ref name)とは何か?
例えば、git log --oneline
を実行すると以下のようにコミット履歴が表示されます。(–onelineオプションはコミット履歴を一行ずつ表示するオプションです。)
$ git log --oneline
0adba46 (HEAD -> main, origin/main) [F]edit class name
b80abcb (test) [A]test Components UserDetail
参照名(ref name)とは、コミットのハッシュ値の後ろに表示されるカッコで囲まれた部分のことです。
(HEAD -> main, origin/main)
(test)
参照名は、各ローカルブランチがどのコミット履歴を指しているか、ローカルと紐づけた各リモートレポジトリのコミット履歴がどこを指しているか、現在のブランチはどのコミットにいるかを示しています。
実際の開発でも多用する非常に重要な情報です。
主要な参照名の意味(HEAD、main、origin/main)
以下の参照名には大きく分けて「HEAD->」「main」「origin/main」「test」の4つがあります。
$ git log --oneline
0adba46 (HEAD -> main, origin/main) [F]edit class name
b80abcb (test) [A]test Components UserDetail
HEAD->
「HEAD->」は現在のコミット履歴を参照しているブランチがどこかを表しています。HEAD -> main
は、現在のブランチが「main」にいることを示しています。
origin/main
「origin/main」はリモートに同期したリモートレポジトリ名originのmainブランチの最新のコミットの場所を指しています。(「リモートレポジトリ名/ブランチ名」と対応しています)
「リモートに同期した」というのが分かりにくいかもしれないので、追加で解説します。
リモートレポジトリはGithub上に存在します。リモートレポジトリのコミット履歴をローカルレポジトリに取り込んだときに、「リモートレポジトリ名/ブランチ名」のコミット履歴が更新されます。
このため、自分以外の他の人が該当するGithub上のリモートレポジトリのコミット履歴を前に進めた場合、ローカルの「リモートレポジトリ名/ブランチ名」が指す最新のコミット番号は、Github上のリモートレポジトリとずれます。
もし、ローカルレポジトリに同期しているリモートレポジトリの状態を最新に更新したい場合は「git fetch」を実行してください。
test
2つ目のコミット履歴の参照名は「test」になっています。
これはローカルレポジトリの「test」ブランチは、このコミット履歴にいますよということです。
testブランチがmainブランチのコミット履歴を取り込めば、「test」は「main」や「origin/main」と同じ場所に来ます。
実際にtestブランチに移動して、mainブランチの内容を取り込むと以下のようになります。
#testブランチに移動
$ git checkout test
Switched to branch 'test'
#mainブランチのコミット履歴を取り込む
$ git rebase main
Successfully rebased and updated refs/heads/test.
#コミット履歴を表示
$ git log --oneline
0adba46 (HEAD -> test, origin/main, main) [F]edit class name
b80abcb [A]test Components UserDetail
(HEAD -> test, origin/main, main)
と表示され、「test」が「main」や「origin/main」と同じ場所に来ていることがわかります。
なお、現在はtestブランチにいるので、「HEAD->」は「test」を指しています。
–abbrev-commit
--abbrev-commit
はコミット番号のハッシュ値を省略表記するオプションです。
abbrevはabbreviation(アブリビエーション)の略で、省略という意味です。
通常のgit logではコミット番号は以下のように表示されます。
$ git log
commit 0adba468d548b1b4b2bea02104b6dc9a8f2ea0fa (HEAD -> test, origin/main, main)
--abbrev-commit
をつけると上位7桁(重複が発生する場合は、重複しないだけの最小桁数)を表示します。
$ git log --abbrev-commit
commit 0adba46 (HEAD -> test, origin/main, main)
–oneline
git logと合わせてよく使われる便利オプションの一つに--oneline
があります。
onelineという名の通り、各コミット履歴を一行で表示します。
–oneline有り無しの違い
–onelineが無い場合
$ git log
commit 0adba468d548b1b4b2bea02104b6dc9a8f2ea0fa (HEAD -> test, origin/main, main)
Author: test user <examole@xxx.co.jp>
Date: Mon Jan 24 12:07:03 2022 +0900
[F]edit class name
–onelineオプションをつけない場合は、コミットした人の情報、いつコミットしたかといった情報を確認することができます。
–onelineが有る場合
$ git log --oneline
0adba46 (HEAD -> test, origin/main, main) [F]edit class name
b80abcb [A]test Components UserDetail
–onelineの表示内容
git log --oneline
で表示される内容は、以下3つの主要な情報です。
①コミットオブジェクトのハッシュ値(省略形)
コミットオブジェクトのハッシュ値(省略形)とは「4f919da1d
」といった数値と記号のことです。
冒頭からの7桁(重複が発生する場合は、重複しないだけの最小桁数)を表示します。
省略なしの場合は「4f919da1d5b3f845d0b7310ccb6dd58c0f6503fa
」のようになります。
②参照名
参照名とはコミット番号のハッシュ値の横の( )で表される部分です 例:(HEAD -> main)
HEAD、ブランチ、タグ、ローカルのリモートブランチがどのコミット履歴を指しているかを示しています。
どのブランチもそのコミット履歴を指していない場合参照名は表示されません。
③コミットメッセージ
最後に各コミット履歴に対応するコミットメッセージが表示されます。
例:Merge pull request #21193 from atom/fs-admin-0.15.0
–onelineと–pretty=onelineの違い
--oneline
と似たオプションに--pretty=online
があります。
–prettyは表示フォーマットを指定するオプションです。表示内容にonlineを指定すると一行で表示します。
–onelineとの違いは、コミットオブジェクトのハッシュ値が省略形にならない点です。
–onelineと–pretty=onelineの違い実例
–onelineの場合
$ git log --oneline -1
4f919da1d (HEAD -> master) Merge pull request #21193 from atom/fs-admin-0.15.0
なお、–onelineの後ろの「-1」は表示するコミット履歴の数を指定しています。「-1」なので1つだけ表示します。
–pretty=onelineの場合
$ git log --pretty=oneline -1
4f919da1d5b3f845d0b7310ccb6dd58c0f6503fa (HEAD -> master) Merge pull request #21193 from atom/fs-admin-0.15.0
–pretty=onelineの場合はコミット履歴が長いことがわかります。
–pretty=oneline –abbrev-commit
コミット番号のハッシュ値を省略表記するオプション--abbrev-commit
を使って、--pretty=oneline --abbrev-commit
とすると表示内容は--oneline
と同じになります。
–pretty=oneline –abbrev-commitの場合
$ git log --pretty=oneline --abbrev-commit -1
4f919da1d (HEAD -> master) Merge pull request #21193 from atom/fs-admin-0.15.0
git log –oneline –graph
gitのコミット履歴を見やすく表示する簡単なオプションに--oneline --graph
があります。
「–oneline」と「–graph」を組み合わせたものです。他人の環境などエイリアスを設定してない環境でログを確認する場合など、直打ちしなければいけない場合はこのオプションをつけるのが便利です。
以下のような形でコミットの流れを一覧で確認することができます。