Git - blame 명령어

JS · 05 Jul 2020

git 프로젝트에서 어떤 코드를 누가 수정했는지, 어떤 commit으로 수정이 되었는지 궁금할 때가 있습니다. 이럴 때, git blame 명령어를 사용하면 누가 수정했는지, 어떤 commit으로 수정되었는지 알 수 있습니다.

다음 명령어에 대해서 자세히 알아보겠습니다.

  • git blame : 에 대한 모든 수정 내역
  • git blame -s : 에 대하 모든 수정 내역. author name과 timestamp는 출력하지 않음.
  • git show : 에 대한 description과 수정사항을 보여줌
  • git blame -L <start,end> : 에서 start부터 end 라인까지의 수정 내역만 보여줌

git blame으로 수정 내역 확인

저는 Android에서 이미지를 라이브러리 Glide를 다운받았고 blame 명령어로 누가 수정했는지 살펴볼 것입니다.

Glide.java라는 파일을 라인별로 누가 수정했는지 알고 싶다면, git blame 명령어와 함께 현재 디렉토리에서 확인하고 싶은 파일 경로를 입력하면 됩니다.

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

그럼 다음과 같이 왼쪽에는 commit id, 파일 이름, 수정한 사람, 수정 시간 순서로 보이고, 오른쪽에는 라인 번호와 코드가 보입니다. 이렇게 Line 별로 누가, 어떤 commit으로 수정했는지 알 수 있습니다.

....
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;

수정사항 확인

여기서 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>
....

git blame에서 author, timestamp 출력하지 않기

git blame 명령어에서 -s 옵션을 이용하면 author name과 timestamp를 출력되지 않습니다.

mjs@mjs:~/Desktop/glide/library/src/main/java/com/bumptech/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;

git blame으로 특정 line에 대한 수정사항만 확인

소스의 모든 line에 대해서 commit을 확인하고 싶지 않고, 특정 line에 대해서만 확인하고 싶을 때가 있습니다.

만약 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";
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha