git blame: 코드 한 줄의 저자와 커밋 추적하기

git blame으로 파일 각 줄의 마지막 수정자와 커밋을 확인하고, 줄 범위 지정·공백 무시·코드 이동 추적 등 실전 옵션을 정리한다.

· 4 min read · PALDYN Team

지난 글에서 커밋의 상세 내용을 조회하는 git show를 다뤘다. 이번에는 코드 한 줄이 누구에 의해 언제 작성됐는지 추적하는 git blame을 살펴본다. 버그를 발견했을 때 담당자를 찾거나, 코드의 도입 배경을 파악할 때 가장 먼저 꺼내는 도구다.

기본 사용법

# 파일 전체 blame
git blame src/app.js

# 특정 커밋 시점의 상태
git blame HEAD~3 -- src/app.js

# 특정 브랜치 기준
git blame main -- src/app.js

각 줄 앞에 커밋 해시 · 저자 · 날짜 · 줄 번호 · 코드 내용 이 순서로 출력된다.

git blame 출력 구조

줄 범위 지정 (-L)

파일 전체를 볼 필요 없을 때 -L으로 범위를 좁힌다.

# 10번째 줄부터 20번째 줄까지
git blame -L 10,20 src/app.js

# 10번째 줄부터 10줄
git blame -L 10,+10 src/app.js

# 정규식 매칭 줄부터 다음 함수 끝까지
git blame -L '/function login/,/^}/' src/auth.js

공백 무시와 이동 추적

# 공백·들여쓰기 변경 무시 (리포맷 커밋 건너뜀)
git blame -w src/app.js

# 같은 파일 내 코드 이동 추적
git blame -M src/app.js

# 다른 파일에서 복사·이동된 코드도 추적
git blame -C src/app.js

-w는 자동 포맷터가 전체 파일을 건드린 커밋을 무시해, 실제 로직 변경자를 정확하게 찾아준다. -M-C는 함수를 다른 파일로 분리했을 때도 원래 작성자를 유지한다.

스크립트 파싱용: —porcelain

git blame --porcelain src/app.js

--porcelain은 사람이 읽기 불편하지만 스크립트 파싱에 최적화된 구조화 출력을 제공한다. CI 파이프라인에서 특정 저자의 변경 비율을 계산하거나, 커밋별 줄 수를 집계할 때 사용한다.

git blame 주요 옵션

이메일 표시: —show-email

# 저자 이름 대신 이메일 표시
git blame --show-email src/app.js
git blame -e src/app.js  # 단축형

팀원이 많거나 동명이인이 있을 때 유용하다.

blame → log → show 연계 워크플로

# 1. blame으로 문제 줄의 커밋 해시 확인
git blame -L 42,42 src/api.js
# → e4f5a6b (Jane 2024-02-10 ...)

# 2. log로 해당 커밋 주변 맥락 확인
git log --oneline e4f5a6b~3..e4f5a6b

# 3. show로 커밋 전체 diff 확인
git show e4f5a6b

세 명령을 연계하면 버그의 도입 시점과 의도를 빠르게 파악할 수 있다.

GUI 통합

VS Code의 GitLens, GitHub의 Blame 뷰, JetBrains IDE의 Annotate 기능은 모두 git blame 위에 구축된 도구다. 내부적으로 같은 데이터를 쓰므로, CLI에서 익힌 옵션은 GUI에서도 동일하게 적용된다.


지난 글: git show: 커밋 상세 내용과 오브젝트 조회하기

다음 글: git grep: 워킹 트리와 히스토리에서 패턴 검색하기


읽어주셔서 감사합니다. 😊