바꾸기 전에 프로젝트부터 읽어
git log와 git 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를 상대로 처음 써보면 숨은 지름길을 찾은 기분이 들 거야.