- 제목과 본문을 한 줄 띄워 분리하기
- 제목은 영문 기준 50자 이내로
- 제목 첫 글자를 대문자로
- 제목 끝에 . 금지
- 제목은 명령조로
- 부정문 Don't use (Not use가 아니라)
- Github - 제목(이나 본문)에 이슈 번호 붙이
- (#번호)
- 본문은 영문 기준 72자마다 줄 바꾸기
- 본문은 어떻게보다 무엇을, 왜에 맞춰 작성하기
- 관사 사용 X
- 동명사보다 명사를 사용
커밋 메시지 구조
type: Subject
body
footer
TYPE
프로젝트의 성격이나 상황에 맞춰서 적절하게 골라서 사용할 것.
fix, docs, style, refactor, test, chore의 타입을 기본으로 하고, feat를 사용하거나 new, improve를 사용하는 것 중 하나를 선택하고, 릴리스에 대한 별도의 커밋을 남기고 싶은 경우 release 타입을 추가하면 된다.
ex. feat, fix, docs, sytle, refactor, test, chore
- feat: 새로운 기능을 추가하거나 기존의 기능을 요구 사항 변경으로 변경한 경우
기능 추가와 수정을 나누어서 쓰고 싶은 경우 아래 처럼 2개로 나누어서 타입을 지정할 수 있다.- new: 새로운 기능을 추가 한 경우
- improve: 기존 기능을 수정 한 경우, 요구 사항이 변경되어 수정된 경우에도 improve 타입으로 한다.
- fix: 기능상 버그 픽스를 했을 경우
- docs: 문서(주석)의 추가/수정의 경우, 직접적인 코드의 변화 없이 순수하게 문서(주석)만 추가/수정했을 경우
- style: UI를 추가/변경 하거나 스타일 관련 작업을 했을 경우
- refactor: 기능의 변화가 아닌 코드를 리팩토링했을 경우, 코드 리뷰 등으로 로직(기능)의 변화 없이 단순 함수 내부에서만 사용하는 이름을 변경하였거나, 코드 pretty 등을 적용했을 경우
- test: 테스트 코드를 별도로 추가하거나, 변경했을 경우, 만약 기능을 추가하면서 테스트 코드를 동시에 작성했으면 feat 타입으로 사용
- chore: 기능/테스트 코드, 문서, 스타일, 리팩토링을 제외한, 배포, 빌드 등과 같이 프로젝트의 기타 작업들에 대해 추가/수정했을 경우, lint 등의 적용으로 코드 스타일을 수정 했을 때도 chore 사용
- release: 릴리스를 하기 위해 패키지 버전을 올리거나, 릴리스 버전 커밋을 찍기 위한 경우
git emoji를 사용할 경우 타입을 이모지로 대체하거나 타입 앞에 이모지를 붙여 사용한다.
본문(Body)
커밋에서 수정된 상세내역을 작성한다. 여기선 평서문으로 작성하면 된다.
본문은 생략 가능하며, 제목(Subject) 라인과 반드시 한 줄을 띄운다.
되도록 한 줄에는 72자 이하로 작성하고 길어질 경우 개행해서 다음 줄에 입력한다.
제목과 마찬가지로 100자 정도까지는 괜찮은 거 같다.
수정 내역을 블릿 기호(*) 이용해서 하나씩 입력하는 방법도 좋다.
본문의 내용은 어떻게보다는 무엇을 왜에 맞춰 작성한다.
본문에는 이 커밋이 무엇을 왜 고쳤는지 적혀 있는 것이 나중에 히스토리 파악하거나, 코드의 변경 의미를 파악하기에 훨씬 도움이 된다.
어떻게 고쳐졌는지는 코드의 히스토리를 통해 충분히 파악할 수 있으니 반드시 무엇을 왜 했는지에 대해 작성하도록 한다.
꼬리말(Footer)
꼬리말을 해당 커밋과 연관된 이슈 트래킹 번호를 입력.
제목에는 커밋이 온전히 한 개의 이슈에 해당하는 경우에만 추가해서 사용하고 그 외의 경우 대부분 꼬리말에 이슈 번호를 라벨과 함께 추가.
꼬리말은 생략 가능하며, 반드시 제목(Subject) 또는 본문(Body) 라인과는 반드시 한 줄을 띄운다.
라벨의 종류
- Resolves: 문의나, 요청에 의한 이슈에 해당하는 경우 이슈 번호
- Closes: 일반적인 개발과 관련된 이슈에 해당하는 경우 이슈 번호
- Fixes: 버그 픽스, 핫 픽스 관련 이슈에 해당하는 경우 이슈 번호
- See also: 커밋의 이슈와 연관되어 있는 이슈들이 존재 하는 경우, 또는 관련된 이슈들이 있는 경우 이슈 번호
Resolves 한 가지만 사용해도 된다, Github의 경우 Commit Message 또는 Pull Request의 경우 메시지에 있는 키워드로 이슈를 닫을 수 있는데 그때 위 라벨의 Resolves, Closes, Fixes로 닫을 수 있다.
추가로 필요하다면 꼬리말에 이슈 관련 번호를 입력해서 커밋을 통해 실제 해당 커밋의 배경이 어떠한지를 추적 가능하게 하게 하면 된다.