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行までの修正履歴のみ表示
Related Posts
- git cloneコマンドでリモートリポジトリをローカルに保存する
- Git - 2つのコミットの違いを確認する(コードの違い、ファイルの違い)
- Git - ブランチ名を変更する方法
- Git - 特定のコミットを削除、元に戻す(reset、revert)
- Git - リモートブランチの作成と削除
- GitHubにssh-keyを登録する方法(Windows10)
- git log - 特定のauthorのcommitリストのみを出力する
- git log - commit リスト簡単に出力 (pretty)
- Git - revert 命令 (commit 元に戻す)
- git diffコマンドでファイルの変更を確認する
- git showコマンドでコミット情報を確認する
- Git - ブランチの作成、削除、チェックアウト
- Git - リモートリポジトリの追加、解除
- Git - Staging領域のファイルをUntrackedに変更する
- Git - commit logで修正されたファイルのリストを見る
- Git - 最後のコミットを修正、削除する方法(reset、amend命令)
- git commit message エディタの変更 (Vim, Sublime, Atom, VSCode)
- Git - blameコマンド、コードを修正した人とCommitを探す
- Git - Patchファイルの作成と適用