C.W.K.
Stream
Lesson 02 of 05 · published

log -S와 log -G: history 검색

~20 min · log, search

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

Pickaxe — 공간 아니라 시간 가로질러 검색

Grep 은 working tree — 지금 존재하는 것 — 검색. git log -Sgit log -G, 'pickaxe' flag 는 모든 history 가로질러 검색: 어느 commit 이 이 문자열을 어떤 파일이든 어디든 도입했나 / 제거했나. 진짜 '우리 X 기능 ship 한 적 있어?' 또는 '이 magic 상수 언제 처음 등장?' 질문에 처음 쓰면 cheating 같은 기분. History 가 검색 가능하다는 걸 내재화하면 ad-hoc 고고학이 몇 초 답이 돼.

-S "term" 은 정확히 그 term 의 카운트가 바뀐 commit 찾기 — 즉 term 이 추가되거나 제거됨. 특정 식별자, 함수 이름, 환경 변수, magic 문자열 추적에 최고. -G "regex" 는 변경된 줄 어디든 regex 매칭하는 commit 의 diff 찾기. 더 느슨, 'JSON config 건드린 commit' 같은 패턴에 좋음. 둘 다 default 로 모든 history 검색, -- <path> 로 디렉토리/파일에 스코프.

Workflow 완성하는 flag 는 -p — 매칭 commit 의 실제 diff 인라인 표시. git log -p -S "OAUTH_ENABLED"OAUTH_ENABLED 가 codebase 에 진입한 commit + 동시에 같이 바뀐 다른 거의 주변 맥락 보여줌. --all 로 현재 아닌 모든 branch 검색, --source 로 각 매치 가 어느 ref 에서 왔는지 라벨링.

구조적 사촌: git log --grep="auth" 가 diff 아니라 commit 메시지 검색. Commit 이 대충 뭐라 했는지 기억할 때 유용. --author="Pippa" 가 author 필터. --since="2026-04-01" --until="2026-05-01" 가 날짜 범위. Pickaxe + grep + author + 날짜 필터가 자연스럽게 layer — 지난 분기 특정 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

아무 프로젝트에서 working tree 에서 찾을 수 있는 nontrivial 식별자 (함수명, env var, config key) 골라. git log -p -S "<term>" 돌려 첫 등장, 이후 이동, 제거 추적. 그 다음 regex 패턴 (예: 폐기된 API 엔드포인트, deprecated import path) 골라 -G 사용. Pickaxe 로 초 단위 답할 수 있는데 코드 읽기로는 분 단위 걸렸을 질문 하나 적어.

Progress

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

댓글 0

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

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