코드 작성에 Code Convention이 있듯이, 깃 커밋 메시지에도 Commit Message Convention과 규칙이 존재하는데, 이 내용을 정리해봤다.
Commit Message Convention
커밋 메시지는 제목, 본문, 꼬리말로 구성하고, 각 항목에는 아래의 내용을 작성한다.
(※ 중요 : 항목 간의 구분은 한 줄 공백으로!)
제목 : [Commit Type]: [Commit Message][#Issue Number]
내가 코드를 작성한 의도와 짧은 요약을 작성한다. 내 의도를 type으로 명시하고, 내용은 명령조로 작성한다.
(마침표는 쓰지 않음! / 영문으로 작성하는 경우 50자 이내, 첫 글자는 대문자로)
■ Commit Type
· feat : 기능 추가
· fix : 버그 수정
· refactor : 리팩토링
· docs : 문서 수정
· test : 테스트 또는 테스트 코드 추가
· style: 코드 포맷팅, 세미콜론 누락, 코드 의미에 영향 없는 변경
· build: 빌드 시스템 수정, 외부 종속 라이브러리 수정(gradle, npm 등)
· rename : 파일명 또는 폴더명 수정
· remove : 코드 또는 파일 삭제
· chore : 그 외 자잘한 수정
본문 : [Commit Description]
- 본문은 생략 가능하다.
- 본문과 제목은 한 줄 띄워 분리한다.
- 한 줄에 72자를 넘기지 않고, 무엇을, 왜 했는지 설명한다.
- 어떻게 했는지는 작성하지 않는다.
- 본문은 명령문으로 작성하지 않아도 된다.
꼬리말 : 커밋과 연관된 issue를 명시하려는 경우, 꼬리말에 issue tracker를 작성한다.
■ Issue Tracker
· Fixes : 해당 이슈를 수정 중인 경우
· Resolves : 해당 이슈를 해결한 경우
· Ref : 참조할 이슈가 있을 때
· Related to : 이 커밋과 관련된 이슈
왜 제목을 명령조로 작성해야 하나?
refactor: Removed unnecessary comments from User class
- Removed commented-out code and outdated comments
- Enhances code cleanliness and reduces clutter
User 클래스에서 불필요한 주석을 제거했다는 커밋 메시지 예시이다.
이 메시지를 한글로 번역하면,
refactor : 유저 클래스 불필요한 주석 제거함
- 주석 처리된 코드와 오래된 주석 제거했음
- 코드 청결함 향상 ···
커밋 메세지를 확인하는 입장에서 과거 기록을 보는 것이니, 명령조보다 설명문이 훨씬 자연스러워 보일 수 있다.
그럼에도 명령조로 제목을 작성하는 이유는 자동 메시지로 채워진 커밋 사이에 자연스레 녹아들기 위해서라고 한다.
Pull Request나 Merge 할 때 자동 생성되는 메시지를 보면,
- Revert "Remove unnecessary comments from User class"
- Merge pull request #2 from dev/feature
명령문으로 커밋 메세지를 생성하고 있는 걸 볼 수 있다.
영문으로 제목을 작성하는데, 내가 명령조로 작성을 제대로 한 게 맞는지 헷갈린다면 문장 앞에
- If applied, this commit will
을 붙여 자연스레 해석되는지 확인해 보면 이해가 빠를 것이다.
(자연스러운 문장 예시)
- (If applied, this commit will) Remove unnecessary comments and whitespace
- (If applied, this commit will) Bump version to 2.0.0
제목의 첫 글자는 대문자로 하는 규칙 관련
글을 쓰면서 찾아보니, 제목의 첫 글자를 대문자로 할지, 소문자로 할 지에 의견이 꽤 갈리는 것 같다.
영어 문법에 맞게 첫 글자는 대문자로 하는게 맞는 것 같긴 한데.... 팀에서 소문자로 쓰고 있다면 그냥 규칙을 따르도록 하자.
참고 :
https://meetup.nhncloud.com/posts/106
https://kdjun97.github.io/git-github/commit-convention/#body-rule