좋은 커밋은 한 가지 변경만 담고(원자적 커밋, atomic commit), 그 변경이 무엇이고 왜 필요했는지를 메시지로 설명한다. 히스토리는 나중의 나와 동료가 읽는 문서다.
원자적 커밋
- 한 가지 목적의 변경만 담는다. 여러 파일에 걸쳐도 목적이 하나면 괜찮다
- 리뷰·되돌리기·cherry-pick이 쉬워지고, git bisect로 원인 커밋 찾기가 원인을 정확한 커밋으로 좁힌다
- 구조 정리와 동작 변경은 따로 커밋한다(정리(Tidying))
- 로컬 커밋은 자주 하고, 푸시 전에 인터랙티브 리베이스로 커밋 정리로 다듬는다. 빌드 산출물·의존성·개인 설정 파일은 넣지 않는다
메시지 규칙
- 제목과 본문은 빈 줄로 나눈다. 제목은 50자 안팎, 본문은 72자 정도에서 줄을 바꾼다
- 제목 끝에 마침표를 찍지 않는다. 영어라면 명령형 동사로 시작한다(Add, Fix, Remove, Rename…)
- 본문은 "어떻게"보다 "무엇을, 왜"를 쓴다. 어떻게는 diff가 보여준다
Conventional Commits
타입(범위): 요약 형태로 커밋 종류를 드러내는 관례다. 체인지로그 자동 생성이나 시맨틱 버저닝(Semantic Versioning, SemVer) 도구와 잘 맞는다.
feat(auth): 리프레시 토큰 회전 추가
fix: 빈 장바구니에서 결제 버튼 비활성화자주 쓰는 타입은 feat·fix·docs·style·refactor·test·chore다. 쓸지 말지, 대소문자를 어떻게 할지는 팀이 정한다. 합의가 없다면 놀랍지 않은 쪽으로 기존 히스토리를 따른다.
출처: How to Write a Git Commit Message · Conventional Commits 1.0.0