Git - blameコマンド、コードを修正した人とCommitを探す

gitプロジェクトでどのコードを誰が修正したのか、どのcommitで修正が行われたのか気になる時があります。 このとき、 git blameコマンドを使用すると、誰が変更したのか、どのコミットで変更したのかを知ることができます。

1. git blameで誰がコードを修正したかを確認する

Androidで画像をライブラリGlideプロジェクトの git blameコマンドで誰がコードを修正したのか見てみましょう。

Glide.javaというファイルを行ごとに誰が修正したのか知りたいなら、以下のように git blameコマンドでファイルパスを入力すればいいです。

~/../glide$ git blame Glide.java

次のように、左側にはコミットID、ファイル名、変更した人、修正時間の順に表示し、右側には行番号とコードが表示されます。 こうしてLine別に誰が、どのコミットで修正したのかがわかります。

....
ef027a4d4a library/src/main/java/com/bumptech/glide/Glide.java (Sam Judd                 2015-01-02 18:55:14 -0800 111) public class Glide implements ComponentCallbacks2 {
f389e91cce library/src/main/java/com/bumptech/glide/Glide.java (Sam Judd                 2015-02-14 17:47:55 -0800 112)   private static final String DEFAULT_DISK_CACHE_DIR = "image_manager_disk_cache";
f389e91cce library/src/main/java/com/bumptech/glide/Glide.java (Sam Judd                 2015-02-14 17:47:55 -0800 113)   private static final String TAG = "Glide";
cce9375713 library/src/main/java/com/bumptech/glide/Glide.java (Sam Judd                 2020-03-27 17:12:06 -0700 114)
cce9375713 library/src/main/java/com/bumptech/glide/Glide.java (Sam Judd                 2020-03-27 17:12:06 -0700 115)   @GuardedBy("Glide.class")
f389e91cce library/src/main/java/com/bumptech/glide/Glide.java (Sam Judd                 2015-02-14 17:47:55 -0800 116)   private static volatile Glide glide;
cce9375713 library/src/main/java/com/bumptech/glide/Glide.java (Sam Judd                 2020-03-27 17:12:06 -0700 117)
6c56e3831a library/src/main/java/com/bumptech/glide/Glide.java (judds                    2017-07-07 12:33:53 -0700 118)   private static volatile boolean isInitializing;

2. commit のすべての修正を確認する

上記のcommit f389e91cceのすべての修正を見たい場合は、 git show <commit id> コマンドを使って詳細を確認できます。

~/../glide$ git show f389e91cce

commit f389e91ccecac6ddf736bbf1a4346782609eb034
Author: Sam Judd <judds@google.com>
Date:   Sat Feb 14 17:47:55 2015 -0800

    Convert to google style.

diff --git a/checkstyle.xml b/checkstyle.xml
index 34735f1b1..456d5e34a 100644
--- a/checkstyle.xml
+++ b/checkstyle.xml
@@ -150,7 +150,7 @@
         <module name="StringLiteralEquality" />
         <module name="UnnecessaryParentheses" />
         <module name="LineLength">
-            <property name="max" value="120" />
+            <property name="max" value="100" />
         </module>
....

3. author、timestampは出力しない

git blameコマンドで-sオプションを使用すると、author nameとtimestampは出力されません。

~/../glide$ git blame -s Glide.java
ef027a4d4a library/src/main/java/com/bumptech/glide/Glide.java 111) public class Glide implements ComponentCallbacks2 {
f389e91cce library/src/main/java/com/bumptech/glide/Glide.java 112)   private static final String DEFAULT_DISK_CACHE_DIR = "image_manager_disk_cache";
f389e91cce library/src/main/java/com/bumptech/glide/Glide.java 113)   private static final String TAG = "Glide";
cce9375713 library/src/main/java/com/bumptech/glide/Glide.java 114)
cce9375713 library/src/main/java/com/bumptech/glide/Glide.java 115)   @GuardedBy("Glide.class")
f389e91cce library/src/main/java/com/bumptech/glide/Glide.java 116)   private static volatile Glide glide;
cce9375713 library/src/main/java/com/bumptech/glide/Glide.java 117)
6c56e3831a library/src/main/java/com/bumptech/glide/Glide.java 118)   private static volatile boolean isInitializing;

4. 特定のラインに対する修正のみを確認

ソースのすべてのラインに対してコミットを確認したくなく、特定のラインについてのみ確認したい場合があります。

Glide.javaのLine 111から113までの修正のみを確認したい場合

Line 111   public class Glide implements ComponentCallbacks2 {
Line 112       private static final String DEFAULT_DISK_CACHE_DIR = "image_manager_disk_cache";
Line 113       private static final String TAG = "Glide";

次のように -L <start>,<end>オプションで行を指定できます。

以下のコマンドで -L 111,113 オプションの意味は、111 行から 113 行までの修正のみを出力するという意味です。

~/../glide$ git blame -L 111,113 Glide.java

ef027a4d4a (Sam Judd 2015-01-02 18:55:14 -0800 111) public class Glide implements ComponentCallbacks2 {
f389e91cce (Sam Judd 2015-02-14 17:47:55 -0800 112)   private static final String DEFAULT_DISK_CACHE_DIR = "image_manager_disk_cache";
f389e91cce (Sam Judd 2015-02-14 17:47:55 -0800 113)   private static final String TAG = "Glide";

5. git blame コマンドのクリーンアップ

上記で紹介した命令をまとめました。

  • git blame <file name><file name>のすべての修正私
  • git blame -s <file name><file name>のすべての修正履歴。 author name、timestampは出力されません
  • git show <commit id><commit id>の説明と修正を見る
  • git blame -L <start,end>``<file name><file name>からstartからend行までの修正履歴のみ表示
codechachaCopyright ©2019 codechacha