일찍, 자주, 의도적으로 commit해
대부분의 Git 조언은 어떤 명령과 flag, workflow를 쓸지 말해. 더 가르치기 어려운 기술은 리듬이야. 언제, 얼마나 자주, 어떤 의도로 commit할 것인가 하는 문제지. 의도적으로 commit하는 팀은 무언가가 끝날 때만 commit하는 팀과 코드에 맺는 관계가 달라. 이 리듬이 자리 잡으면 이 quest에서 다룬 고통 대부분이 줄어들어.
일찍 commit해. Commit은 milestone보다 checkpoint에 가까워. compile되고 대략 작동하는 일관된 작업 단위가 생긴 순간 commit해. 완성을 기다리지 마. 완성은 한 session 안에 잘 오지 않는 높은 기준이야. 작고 이른 commit은 reflog에 촘촘한 지점을 남기고, 네 작업을 bisect하며, 이미 작동한 부분을 잃지 않고 실험을 포기할 자유를 줘.
자주 commit해. 한 작업 session에는 commit이 여러 개 나오는 게 자연스러워. 각 commit이 '빈 입력을 처리한다', '오타를 고친다', 'helper를 추출한다' 같은 생각 하나를 붙잡게 해. push하기 전에 interactive rebase로 squash할지 그대로 둘지는 팀 정책에 따라 정하면 돼. 자주 commit하는 목적은 공개 이력의 모양보다 session 중 안전망을 만드는 데 있어.
의도적으로 commit해. 각 commit은 어떤 개념을 한 걸음 나아가게 했나?라는 질문에 답해야 해. 답에 '그리고'가 필요하면 commit 둘일 가능성이 커. 50자 안팎으로 답을 말할 수 없다면 아직 일관된 단위가 아닐 수 있어. 분명한 message를 쓰는 과정은 무엇이 바뀌었는지 스스로 이해했는지 확인하는 검토야.
이 리듬은 일 년 뒤 크게 보답해. 일찍, 자주, 의도적으로 commit한 engineer는 읽을 수 있는 reflog, 자기 옛 작업을 빠르게 bisect할 지점, 살릴 부분을 잃지 않고 막힌 branch를 버릴 자유, 일 년 전 git log에서 당시 생각을 되찾을 단서를 가져. 끝난 뒤에만 commit하면 기능마다 거대한 commit 하나와 성긴 복구 지점만 남고 자기 코드도 낯선 사람이 쓴 것처럼 보여. 기술은 누적되고, 그 부재도 누적돼.