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

git log와 git diff: 바꾸기 전에 읽기

~24 min · log, diff, inspection

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

바꾸기 전에 프로젝트부터 읽어

git loggit diff는 프로젝트를 읽는 도구야. 입문자는 보통 내가 무엇을 했는지 확인할 때만 쓰지만, 숙련자는 무언가 하기 전에도 써. 함수가 마지막으로 바뀐 때를 찾고, 누구의 코드를 건드릴지 알아보고, 변경 범위를 잡고, push 전에 가설을 검증하지.

그냥 git log를 실행하면 꽤 장황해. 자주 쓰는 모양을 익혀둬. git log --oneline은 제목을 짧게, git log --oneline --graph --decorate --all은 전체 DAG를 보여줘. 후자는 alias로 만들어두면 하루에도 여러 번 쓰게 돼. git log -p는 patch를 함께, git log --stat은 파일 변경 요약을 보여줘. --author, --since/--until, message를 찾는 --grep, diff 내용에서 문자열의 추가와 제거를 찾는 pickaxe -S, 정규 표현식용 -G로 범위를 좁힐 수 있어.

git diff에는 생각보다 많은 모양이 있어. 인자 없는 git diff는 작업 트리와 index를 비교하고, git diff --staged는 index와 HEAD를 비교해. git diff abc..def는 두 commit의 차이, git diff main..feature는 feature가 main에 비해 가진 변경을 그 방향으로 보여줘. git diff --stat은 파일별 요약이고, git diff --word-diff는 단어 단위로 강조해서 산문이나 minified CSS처럼 긴 줄을 읽을 때 유용해.

두 명령은 오래 두고 써먹을 만해. git log -p -- path/to/file는 그 파일을 건드린 모든 commit을 diff와 함께 보여줘서 regression을 추적하기 좋아. git log -L :functionName:path/to/file는 함수 하나의 이력만 따라가. 실제 bug를 상대로 처음 써보면 숨은 지름길을 찾은 기분이 들 거야.

Code

날마다 쓰는 log 조합·bash
# 모든 branch 의 컴팩트 graph (alias 박아!):
git log --oneline --graph --decorate --all

# 파일 하나의 patch 포함 history:
git log -p -- src/auth.js

# 함수 하나의 history (-L 은 token 검색):
git log -L :authenticateUser:src/auth.js

# Pickaxe — 문자열 add/remove 한 commit 찾기:
git log -p -S 'OAUTH_ENABLED'

# author + 날짜 필터:
git log --author="Pippa" --since="2026-04-01" --oneline
목적에 맞는 diff·bash
# working tree vs index:
git diff

# index vs 마지막 commit:
git diff --staged

# commit 두 개:
git diff abc1234..def5678

# feature 가 main 에 비해 가진 것?
git diff main..feature

# 파일 단위 요약:
git diff main..feature --stat

# 산문 / 긴 줄용 단어 단위:
git diff --word-diff content/cwk-quests/git-quest/data.md

External links

Exercise

여러 번 편집된 실제 파일 하나를 골라 git log --oneline -- path를 실행해. commit hash 하나를 골라 git show <hash> -- path를 보고, 이어서 git log -p -S 'someStringYouChosen' -- path를 실행해. 각 query가 git log --oneline만으로는 볼 수 없던 무엇을 보여줬는지 적어봐.

Progress

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

댓글 0

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

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