본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

log -S와 log -G: history 검색

~20 min · log, search

Level 0추적 전 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Pickaxe는 공간이 아니라 시간을 가로질러 찾아

Grep은 지금의 작업 트리를 검색하지만 git log -Sgit log -G, 곧 pickaxe flag는 모든 이력을 가로질러 찾아. 어느 commit이 문자열을 넣거나 없앴는지, 파일 위치와 상관없이 답해. '우리 X 기능을 ship한 적 있나?'나 '이 magic 상수가 언제 생겼지?' 같은 질문이 몇 초짜리 query가 돼. Git 이력을 검색할 수 있는 database로 보는 순간 임시 고고학이 크게 줄어.

-S "term"은 term의 개수가 바뀐 commit, 곧 추가하거나 제거한 commit을 찾아. 식별자, 함수 이름, 환경 변수, magic 문자열을 추적하기 좋아. -G "regex"는 변경된 줄 가운데 정규 표현식에 맞는 diff를 찾아 더 넓은 pattern을 다뤄. 둘 다 기본으로 모든 이력을 검색하고 -- <path>로 directory나 파일 범위를 제한할 수 있어.

-p를 더하면 matching commit의 실제 diff가 함께 보여. git log -p -S "OAUTH_ENABLED"OAUTH_ENABLED가 codebase에 들어온 commit과 동시에 바뀐 주변 맥락을 보여줘. --all은 현재 branch 밖까지, --source는 각 결과가 어느 ref에서 왔는지 표시해.

git log --grep="auth"는 diff가 아니라 commit message를 검색해. message의 일부를 기억할 때 유용하지. --author="Pippa"--since="2026-04-01" --until="2026-05-01"로 author와 날짜도 좁힐 수 있어. pickaxe, grep, author, 날짜를 겹치면 지난 분기에 특정 사람이 특정 식별자를 건드린 commit도 query 하나로 찾을 수 있어.

Code

Pickaxe 일상 쿼리·bash
# OAUTH_ENABLED 가 codebase 에 들어왔거나 떠난 때?
git log -p -S "OAUTH_ENABLED"

# 같음, backend/ 로 제한:
git log -p -S "OAUTH_ENABLED" -- backend/

# Regex 형태 — Postgres URL 건드린 commit:
git log -p -G "postgres://[a-zA-Z0-9_:@.]+" --all

# 모든 branch 가로질러 검색 + 출처 라벨링:
git log -p --all --source -S "deprecatedFn"

# 변경 파일 이름만 (full patch 없이):
git log --name-only -S "deprecatedFn"
grep, author, 날짜 필터와 결합·bash
# 메시지에 "auth" 언급한 commit:
git log --grep="auth" --oneline

# 특정 author + 날짜 범위:
git log --author="Pippa" --since="2026-04-01" --until="2026-05-01" --oneline

# 모든 필터 — 4월 Pippa 작성 auth 관련 diff:
git log --author="Pippa" --since="2026-04-01" --until="2026-05-01" \
        --grep="auth" -p -S "authenticate"

# Alias 로 저장:
git config --global alias.spelunk 'log -p --all --source --decorate'

External links

Exercise

프로젝트의 작업 트리에서 찾을 수 있는 의미 있는 식별자 하나를 골라. 함수 이름, env var, config key 같은 것이 좋아. git log -p -S "<term>"으로 첫 등장과 이후 이동, 제거를 따라가. 이어서 폐기된 API endpoint나 deprecated import path 같은 정규 표현식 pattern을 골라 -G를 써. 코드를 읽으면 몇 분 걸리지만 pickaxe로 몇 초 만에 답한 질문 하나를 적어봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.