[TIL] 좋은 Commit Message 작성하기
3개월 전부터 알고리즘 스터디를 진행하고 있는데 깃허브 레포지토리를 만들어서 흔적을 남기고 있다. 기본 설명을 하는 README를 내가 작성하게 되었는데 클래스명, 파일명에 대한 컨벤션은 큰 기업의 코딩컨벤션을 따라서 하기로 정했지만 커밋 메세지에 대한 컨벤션은 따로 정하지않고 간단하게 작성하기로 결정했다.
그러다가 우아한테크코스깃허브 레포지토리에서 커밋 메세지에 대한 컨벤션을 정한것을 보고 한번 찾아봤는데 알아두면 좋을것 같고 형식을 참고하면 나중에 회사의 커밋 메세지 컨벤션을 따를때도 별 어려움이 없을것같아서 정리해봤다.
[type]([scope]): [subject]
/* 공백 */
[body]
/* 공백 */
[footer]
(종료되었다면)[Closes #이슈번호]
여러 형태가 있겠지만 이런 형식의 커밋메세지 구성이 일반적인것 같아서 가져왔다.
Type
커밋의 의도를 명시하는 곳이다. Type은 크게 태그, 스코프, 제목으로 구성되는데 다음과 같은 것들이 올 수 있다.
Tag
feat | 기능에 관련된것들 (ex: 기능 추가) |
fix | 버그 수정 |
docs | 문서 수정 |
style | 코드의 변경없이 스타일만 수정할 경우(ex : 세미콜론) |
refactor | 코드 리팩터링 |
test | 테스트 추가 또는 수정 |
chore | 코드의 변경없이 빌드나 패키지 매니저를 설정할때 |
build | 빌드 관련 파일 수정 |
ci | CI - 설정파일 수정 |
perf | 성능 개선 |
Scope
변경된 장소를 작성한다. 내가 참고한 사이트가 AngularJS 코딩 컨벤션에 대해 나와있어서 Angular 예시가 많았다.
Subject
제목을 적는 곳이다. 명령문, 현재시재로 작성하며 첫글자는 소문자로, 마침표 없이 작성한다.
Body
내용을 적는 곳이다. 마찬가지로 명령문, 현재시재로 작성하며 변경한 이유와 변경전과의 차이점을 설명한다.
Footer
모든 변경점에 대해서 작성하는 곳이다. 변경에 대한 설명, 변경점들과 migration 지시가 있다면 같이 작성한다.
다음은 사이트에서 가져온 커밋 메세지 예시이다.
BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
myBind: 'bind',
myExpression: 'expression',
myEval: 'evaluate',
myAccessor: 'accessor'
}
After:
scope: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - usually not useful, but in cases where the expression is assignable, you can use '='
myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
Closes
그리고 마지막으로 종료된 이슈라면, Closes # 이슈번호를 추가한다. 이슈가 여러개라면 같이 작성한다.
참고사이트
https://gist.github.com/stephenparish/9941e89d80e2bc58a153#format-of-the-commit-message
AngularJS Git Commit Message Conventions
AngularJS Git Commit Message Conventions. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com