TECH 으로 돌아가기
TECH HACKER NEWS 1주 전 6분 읽기 20 READS

git log 스크롤은 그만: 코드의 '왜'를 찾아주는 Git 히스토리 검색 기술들

개발하다 보면 이런 순간이 꼭 오거든요. 남이 짠 코드를 읽다가 '아니, 이 조건문은 대체 왜 있는 거지?' 싶은데, 주석도 없고 작성자는 이미 퇴사했고, 물어볼 사람도 없는 상황이요. 이럴 때 답은 십중팔구 Git 히스토리 안에 잠들어 있어요. 그런데 우리 대부분은 git log를 켜서 하염없이 스크롤만 하다가 포기하곤 하죠. 최근 한 개발자가 쓴 글이 정확히 이 지점을 짚었는데요. Git에는 히스토리를 '검색'하고 '추적'하는 강력한 도구들이 기본으로 들어 있는데, 의외로 쓰는 사람이 드물다는 거예요. 오늘은 그 도구들을 하나씩 풀어볼게요.

파일 하나의 일대기를 따라가기

가장 기본은 git log -- 경로 형태로 특정 파일의 커밋만 보는 건데요. 여기서 한 발 더 나아간 게 --follow 옵션이에요. 이게 뭐냐면, 파일 이름이 바뀌어도 그 이전 역사까지 계속 추적해 주는 기능이거든요. 리팩토링하면서 utils.js를 helpers.js로 바꿨다면, 기본 log는 이름이 바뀐 시점에서 뚝 끊기지만 git log --follow helpers.js는 개명 전의 기록까지 쭉 이어서 보여줘요. 오래된 코드베이스일수록 파일 이동과 이름 변경이 많아서, 이 옵션 하나로 찾을 수 있는 맥락이 확 달라져요.

곡괭이로 역사를 캐기: -S와 -G

제일 강력한데 제일 덜 알려진 게 바로 pickaxe, 우리말로 곡괭이라고 불리는 기능이에요. git log -S 'retryCount'처럼 쓰면, 이 문자열이 새로 추가되거나 삭제된 커밋만 골라서 보여주거든요. 단순히 diff에 스쳐 지나가는 커밋이 아니라, 그 코드의 '등장'과 '퇴장' 순간만 짚어준다는 게 포인트예요. 그러니까 '이 이상한 변수는 언제, 왜 생겼지?'라는 질문에 곧바로 답을 주는 거죠. 여기에 -p를 붙이면 해당 커밋의 변경 내용까지 같이 보여주고요. 문자열이 아니라 패턴으로 찾고 싶다면 정규식을 받는 -G 옵션을 쓰면 돼요.

라인 단위로 파고들기: git log -L

특정 함수나 코드 블록의 변천사가 궁금할 때는 git log -L이 물건이에요. git log -L 15,30:src/auth.ts처럼 라인 범위를 지정하면, 그 구간이 커밋을 거치며 어떻게 바뀌어왔는지 diff와 함께 시간순으로 펼쳐주거든요. 심지어 git log -L :login:src/auth.ts처럼 함수 이름으로도 지정할 수 있어요. 코드 리뷰하다가 '이 함수 원래 이랬나?' 싶을 때 IDE를 뒤질 필요 없이 터미널에서 바로 확인되는 거죠.

blame도 더 똑똑하게 쓸 수 있어요

git blame은 다들 아시겠지만, 옵션을 붙이면 훨씬 쓸모 있어져요. -w는 공백 변경을 무시해서 들여쓰기만 고친 커밋에 속지 않게 해주고, -C는 다른 파일에서 복사해 온 코드의 원래 출처까지 추적해 줘요. 그리고 프로젝트 전체에 포매터를 돌린 대형 커밋 때문에 blame 결과가 온통 그 커밋으로 도배되는 문제가 있는데요. 이럴 땐 .git-blame-ignore-revs 파일에 해당 커밋 해시를 적어두면 blame이 그 커밋을 건너뛰고 진짜 작성자를 보여줘요. GitHub 웹 화면도 이 파일을 인식하고요.

도구들과의 관계, 그리고 실무 팁

GitLens나 IntelliJ의 Annotate, GitHub 웹의 blame 뷰 같은 편한 도구들도 결국 내부에서는 이런 명령들을 쓰고 있는 거거든요. GUI가 편할 때도 많지만, 원리를 알면 GUI가 지원하지 않는 조합 검색을 터미널에서 해낼 수 있어요. 그리고 이 모든 기능은 커밋이 잘게 쪼개지고 메시지가 성실하게 쓰였을 때 진가를 발휘해요. 히스토리 검색이 잘 되는 저장소를 만드는 건 결국 오늘 내가 쓰는 커밋 메시지라는 얘기죠. 버그가 언제 생겼는지 범위조차 모르겠다면 git bisect로 이진 탐색을 돌리는 방법도 있으니 함께 기억해 두세요.

정리하면, Git은 단순한 코드 저장소가 아니라 '코드의 왜'가 기록된 데이터베이스이고, -S, -G, -L, --follow 같은 옵션들은 그 데이터베이스를 여는 검색 쿼리예요. 여러분은 낯선 코드의 사연이 궁금할 때 어떤 방법으로 찾아보시나요? 나만의 히스토리 탐색 팁이 있다면 댓글로 공유해 주세요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://lalitm.com/post/git-history/
SHARE
처리 중...