目次
コミット履歴の閲覧 (git log)
git logでコミット履歴を確認できます。オプションによって表示を大きく変えることができます。ここでは大まかに4つの表示について紹介します。
- 通常の表示(特に特別なオプションを用いない場合)
- 簡潔なグラフ形式の表示
- 変更したファイルを確認
- 変更したファイルの変更した行数を表示
通常の表示
通常の表示では、以下のような表示が行われます。表示する項目が多い場合はページャが開きます。
以下の例では、ページャが開かないように-nオプションで表示する個数を制限しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
~/TestProject (master) $ git log -n 3 commit 14c2c8fe43e8f94a88c9911f90af924adc70cdc9 (HEAD -> master) Author: ubuntu <[email protected]> Date: Fri Mar 29 20:21:20 2024 +0900 7 commit commit 0ac8e9aa56368c26e41e50520c4a448d76c8545f Merge: 74df5ce 999a4ca Author: ubuntu <[email protected]> Date: Fri Mar 29 20:21:20 2024 +0900 merge 5 commit commit 74df5ce385eaa6348ee847bd086cdad85c7eb053 Author: ubuntu <[email protected]> Date: Fri Mar 29 20:21:06 2024 +0900 4 commit |
簡潔なグラフの表示
簡潔なグラフを表示するためのオプション指定は以下のようになります。
1 |
git log --oneline --all --graph --decorate |
それぞれのオプションの意味は以下の表のようになります。
オプション | 説明 |
---|---|
--all | すべてのブランチを辿ってコミット履歴を表示 |
--decorate | ブランチ名やタグ名等を表示 |
--graph | グラフ表示 |
--oneline | コミット履歴を一行で表示 |
そして、以下のように表示されます。
1 2 3 4 5 6 7 8 9 10 11 |
~/TestProject (master) $ git log --oneline --all --graph --decorate * a772f72 (b2) b2 6 commit | * 14c2c8f (HEAD -> master) 7 commit |/ * 0ac8e9a merge 5 commit |\ | * 999a4ca b1 3 commit * | 74df5ce 4 commit |/ * 84c3b32 2 commit * e5f5a5c 1 commit |
変更したファイルを表示
--name-statusを用いると変更したファイルが表示されます。
1 |
git log --name-status --oneline --all --graph --decorate |
以下のような表示になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
~/TestProject (master) $ git log --name-status --oneline --all --graph --decorate * a772f72 (b2) b2 6 commit | A file3.txt | * 14c2c8f (HEAD -> master) 7 commit |/ | A file4.txt * 0ac8e9a merge 5 commit |\ | * 999a4ca b1 3 commit | | M file2.txt * | 74df5ce 4 commit |/ | M file2.txt * 84c3b32 2 commit | A file2.txt * e5f5a5c 1 commit A file1.txt |
グラフにすると少しガタガタな表示になり、それが気になる場合は--graphオプション外すと
1 |
git log --name-status --oneline --all --decorate |
以下のような表示にできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
~/TestProject (master) $ git log --name-status --oneline --all --decorate a772f72 (b2) b2 6 commit A file3.txt 14c2c8f (HEAD -> master) 7 commit A file4.txt 0ac8e9a merge 5 commit 74df5ce 4 commit M file2.txt 999a4ca b1 3 commit M file2.txt 84c3b32 2 commit A file2.txt e5f5a5c 1 commit A file1.txt |
変更したファイルの変更した行数を表示
--numstatで変更したファイルの変更した行数を表示できます。表示される数値は追加した行数と削除した行数になります。
1 |
git log --numstat --oneline --all --graph --decorate |
表示は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
~/TestProject (master) $ git log --numstat --oneline --all --graph --decorate * a772f72 (b2) b2 6 commit | 0 0 file3.txt | * 14c2c8f (HEAD -> master) 7 commit |/ | 0 0 file4.txt * 0ac8e9a merge 5 commit |\ | * 999a4ca b1 3 commit | | 1 0 file2.txt * | 74df5ce 4 commit |/ | 1 0 file2.txt * 84c3b32 2 commit | 0 0 file2.txt * e5f5a5c 1 commit 0 0 file1.txt |
コミットのチェックアウト (git checkout)
git logでコミット履歴を確認して気になるコミットがある場合、そのコミットのハッシュ値を指定することでその時のバージョンを確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
~/TestProject (master) $ git checkout 999a4ca Note: switching to '999a4ca'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c <new-branch-name> Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at 999a4ca b1 3 commit |
その時、色々メッセージが表示されますが、detached HEAD状態になったというメッセージが表示されます。
この時、--all等のオプションのないgit logを見ると
1 2 3 4 |
~/TestProject ((999a4ca...)) $ git log --oneline --decorate 999a4ca (HEAD) b1 3 commit 84c3b32 2 commit e5f5a5c 1 commit |
のような表示になり、コミット履歴が消えたように見えますが、これは現在いるコミット(HEADが指すコミット)から履歴を辿って表示されているだけなので、
コミット履歴の全体を見るために--allオプションを利用して、git logを用いると
1 2 3 4 5 6 7 8 |
~/TestProject ((999a4ca...)) $ git log --oneline --all --decorate a772f72 (b2) b2 6 commit 14c2c8f (master) 7 commit 0ac8e9a merge 5 commit 999a4ca (HEAD) b1 3 commit 74df5ce 4 commit 84c3b32 2 commit e5f5a5c 1 commit |
のように表示されます。元に戻るにはブランチ名を指定します。そうするとHEADの位置がブランチを指すようになり、detached HEAD状態が解除されます。
1 2 3 4 5 6 7 8 9 10 11 |
~/TestProject ((999a4ca...)) $ git checkout master Previous HEAD position was 999a4ca b1 3 commit Switched to branch 'master' ~/TestProject (master) $ git log --oneline --all --decorate a772f72 (b2) b2 6 commit 14c2c8f (HEAD -> master) 7 commit 0ac8e9a merge 5 commit 74df5ce 4 commit 999a4ca b1 3 commit 84c3b32 2 commit e5f5a5c 1 commit |
あまりないと思いますがブランチやタグで最新のコミットが参照されていない場合は基本的に戻れなくなるのでそこは注意が必要かもしれません。
例えば、detached HEAD状態でコミットをリポジトリへ記録していくと参照されないコミットを生み出せてしまいます。特定のコミットに移動した後にそのコミットからの分岐を作成したい場合は、ブランチを作成しそのブランチをチェックアウトすることでそのような参照されないコミットを生み出すことを防ぐことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
~/TestProject (master) $ git checkout 999a4ca --出力省略-- ~/TestProject ((999a4ca...)) $ git branch b1-1 ~/TestProject ((999a4ca...)) $ git log --oneline --all --decorate a772f72 (b2) b2 6 commit 14c2c8f (master) 7 commit 0ac8e9a merge 5 commit 999a4ca (HEAD, b1-1) b1 3 commit 74df5ce 4 commit 84c3b32 2 commit e5f5a5c 1 commit ~/TestProject ((999a4ca...)) $ git checkout b1-1 Switched to branch 'b1-1' ~/TestProject (b1-1) $ git log --oneline --all --decorate a772f72 (b2) b2 6 commit 14c2c8f (master) 7 commit 0ac8e9a merge 5 commit 999a4ca (HEAD -> b1-1) b1 3 commit 74df5ce 4 commit 84c3b32 2 commit e5f5a5c 1 commit |
上の例で
1 2 |
git branch b1-1 git checkout b1-1 |
は、一つのコマンドとして
1 |
git switch -c b1-1 |
でブランチの作成と切り替えを同時に行っても良いでしょう。
補足として、新しく作成したブランチ(b1-1)に何かを新しくコミットすると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
~/TestProject (b1-1) $ touch file5.txt ~/TestProject (b1-1) $ git add file5.txt ~/TestProject (b1-1) $ git commit -m 'b1 8 commit' [b1-1 c3a4f63] b1 8 commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 file5.txt ~/TestProject (b1-1) $ git log --oneline --all --graph --decorate * c3a4f63 (HEAD -> b1-1) b1 8 commit | * a772f72 (b2) b2 6 commit | | * 14c2c8f (master) 7 commit | |/ | * 0ac8e9a merge 5 commit | |\ | |/ |/| * | 999a4ca b1 3 commit | * 74df5ce 4 commit |/ * 84c3b32 2 commit * e5f5a5c 1 commit |
これでmasterブランチに移動しても、特定のコミットに移動した後で新しく分岐を作成したコミットへ参照できなくなるということはありません。