blame은 비난이 아니라 변경 조사야
이름은 손가락질을 떠올리게 하지만 실제 목적은 forensics야. 어느 commit이 이 줄을 넣었는지, 당시 맥락과 message는 무엇인지, 어떤 변경이 함께 들어왔는지를 찾는 도구지. git blame을 잘 쓰면 코드가 왜 지금 모습이 됐는지 빠르게 이해하고 관련 논의까지 찾아갈 수 있어.
git blame file.js는 source의 각 줄마다 짧은 commit hash, author, 날짜, 줄 번호, 내용을 보여줘. 각 줄을 마지막으로 건드린 commit을 가리키는 셈이야. 그 hash를 git show <hash>로 열면 message와 전체 diff, 함께 바뀐 내용이 나타나. blame 한 줄은 입구이고 commit message와 주변 diff가 실제 증거야.
두 flag가 기계적인 잡음을 줄여. git blame -w는 whitespace만 바뀐 변경을 무시하고, git blame -M은 같은 파일 안에서 이동한 코드를 따라가며 -M -M은 파일 사이 이동을 추적해. 이것이 없으면 reformat이나 함수 이동을 한 refactor commit이 넓은 영역을 차지해 원래 의도를 숨길 수 있어. flag를 쓰면 기계적 변경을 지나 실제 logic을 넣은 commit에 가까워져.
git log -L :functionName:file.js도 손에 익혀. 함수 하나를 바꾼 commit과 diff를 시간순으로 보여줘서 함수가 어떻게 진화했는지 알 수 있어. '이 method 동작이 언제 바뀌었지?'나 '왜 이 validation이 여기 있지?'라는 질문에는 git log file.js에서 commit을 하나씩 여는 것보다 훨씬 빨라.