その他
    ホーム 技術発信 DoRuby gitで詳しい変更履歴が見たい
    gitで詳しい変更履歴が見たい
     

    gitで詳しい変更履歴が見たい

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    git blame, git log を使ってちょっと踏み込んで変更履歴を見てみたい!そんな気持ちにgitは応えてくれます。 git blameとgit logの個人的によく使うオプションの紹介をします。

    画像はいい画像がなかったのでgitのソースコードにgit blameしてみたものです。

    特にblameするつもりはないのですが git blame が好きです。
    blameという名前がよくないですが、だいたい本当にblameしたいときに出てくるのは自分の名前です。
    コミットを追うことでコードの意図がわかりやすくなったり、書いた本人に質問や相談もしやすくなるのでバンバンやりましょう。

    git blame

    git blame は各行についての最終コミットの情報を表示してくれるコマンドです。

    git blameの基本

    基本的な使い方は git bleme <ファイル名> です。
    これで指定した各行の最後のコミットについて、

    • コミットID最初8桁
    • コミットした人
    • コミットの時間
    • 今のその行

    が表示されます。

    こんな感じです。

    df0ba296 (Hoge Hoge         2017-06-30 14:18:16 +0900  1) # coding: utf-8
    df0ba296 (Hoge Hoge         2017-06-30 14:18:16 +0900  2) require 'slack'
    df0ba296 (Hoge Hoge         2017-06-30 14:18:16 +0900  3) require 'uri'
    c0bd872f (Fugaga Fuga         2017-06-30 14:18:16 +0900  4) require 'net/http'
    df0ba296 (Hoge Hoge         2017-06-30 14:18:16 +0900  5)
    00000000 (Not Committed Yet 2017-11-30 11:16:44 +0900  6) BOT_TOKEN = File.read("./bot_token").strip
    00000000 (Not Committed Yet 2017-11-30 11:16:44 +0900  7)
    00000000 (Not Committed Yet 2017-11-30 11:16:44 +0900  8) SHEETS_ID = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    ...
    

    特定の行だけ見る

    これだけでも便利ですが、長いファイルだと目的の部分までたどり着くのが大変ですよね。
    そういうときのために指定した行のぶんだけを表示させるオプション -L があります。

    たとえば5行目から8行目だけ見たいときは git blame -L 5,8 <ファイル名> のように使います。

    df0ba296 (Hoge Hoge         2017-06-30 14:18:16 +0900 5)
    00000000 (Not Committed Yet 2017-11-30 11:16:44 +0900 6) BOT_TOKEN = File.read("./bot_token").strip
    00000000 (Not Committed Yet 2017-11-30 11:16:44 +0900 7)
    00000000 (Not Committed Yet 2017-11-30 11:16:44 +0900 8) SHEETS_ID = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    

    git log

    皆さんお使いであろう git log にも、コミットと変更の履歴が詳しく見られるオプションがあります。

    特定ファイルに関するコミットのみを表示する

    git log <ファイル名> で指定したファイル上の変更があったコミットだけを表示できます。

    差分を表示する

    -p オプションを付けると git diff で見られるような差分をコミットの情報の下につけてくれます。
    ファイルは指定してもしなくても使えます。
    こんな感じです。

    commit 6813ebb5a01cbbf32e2f397a4afb1683dd94df8d (HEAD -> feature/design)
    Author: Hoge Hoge <hhoge@example.com>
    Date:   Thu Nov 30 18:40:05 2017 +0900
    
        画像差し替え
    
    diff --git a/Assets/Scenes/Prefabs/Textures/bg.png.meta b/Assets/Scenes/Prefabs/Textures/bg.png.meta
    index 550ba269..45d17bc0 100644
    --- a/Assets/Scenes/Prefabs/Textures/bg.png.meta
    +++ b/Assets/Scenes/Prefabs/Textures/bg.png.meta
    @@ -12,6 +12,8 @@ TextureImporter:
         linearTexture: 0
         fadeOut: 0
         borderMipMap: 0
    +    mipMapsPreserveCoverage: 0
    +    alphaTestReferenceValue: 0.5
         mipMapFadeDistanceStart: 1
         mipMapFadeDistanceEnd: 3
       bumpmap:
    ...
    

    行を指定する

    -L オプションを付けるとファイルの行も指定できます。

    たとえば git log -L 10,20:<ファイル名> でファイルの10-20行目について変更があったコミットだけを表示できます。
    -p オプションを付けたときと同じように、そのオプションに関する差分も出してくれます。

    まとめ

    git blame も git log もどのコミットでどういう意図で追加・変更されたものなのか簡単に知れるとうれしいですね。
    別に犯人探しのつもりはないので、名前に惑わされず平和で楽しいgit生活を送りましょう。

    [参考]