
혹시 컨벤션에 관해 들어본 적이 있습니까?
개발자들은 대표적으로 naming convention에 대해 먼저 떠올릴 것이다.
naming convention은 쉽게 말하자면 이름 짓기 약속이라고 보면 될 것 같다.
예를 들어, 카멜 케이스(camelCase), 스네이크 케이스(snake_case), 파스칼 케이스(PascalCase) 등이 있다.
커밋 컨벤션은 무엇일까?
Commit Convention은 쉽게 commit할 때 commit message에 대한 약속이라 봐도 무방할 것 같다.
최근에서야 커밋할 때도 commit convention이 있음을 알게 되었지만, 그 전에는 몰라서 못썼다.(얼마전에 프로젝트 진행하면서 습관화중이다)
당연히 커밋 컨벤션을 몰라도 commit하는데에는 무리가 없다.
하지만 왜 굳이구지 귀찮게 약속을 정해 놓은것일까?
협업을 할떄, 본인이 알아보기 쉬울뿐 아니라 남들도 이 커밋은 뭔 내용이지? 라는 의문을 줄이기 위해 커밋 컨벤션이 필요하다.
본 포스팅은 일반적인 사례의 컨벤션을 따릅니다‼️ 다른 현업에서도 다르더라도 이와 많이 벗어나지 않을거라 생각듭니다!!
커밋 메시지에 대한 약속.
커밋 메시지 구조는 크게 3가지로 나뉜다(제목, 본문, 꼬리말)
type: Subject -> 제목
(한칸 띄우기)
body(생략 가능) -> 본문
(한칸 띄우기)
footer(생략 가능) -> 꼬리말
각 커밋 메시지 구조에는 규칙이 존재한다.
아래에서 좋은 커밋 메시지를 만드는 규칙에 대해 언급하겠다.
| Type | 설명 |
|---|---|
| Feat: | 새로운 기능 추가 |
| Fix | 버그 수정 또는 typo |
| Refactor | 리팩토링 |
| Design: | CSS 등 사용자 UI 디자인 변경 |
| Comment: | 필요한 주석 추가 및 변경 |
| Style: | 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우 |
| Test: | 테스트(테스트 코드 추가, 수정, 삭제, 비즈니스 로직에 변경이 없는 경우) |
| Chore: | 위에 걸리지 않는 기타 변경사항(빌드 스크립트 수정, assets image, 패키지 매니저 등) |
| Init: | 프로젝트 초기 생성 |
| Rename: | 파일 혹은 폴더명 수정하거나 옮기는 경우 |
| Remove: | 파일을 삭제하는 작업만 수행하는 경우 |
| Issue Tracker | 설명 |
|---|---|
| Fixes: | 이슈 수정중(아직 해결되지 않은 경우) |
| Resolves: | 이슈를 해결한 경우 |
| Ref: | 참조할 이슈가 있을 때 사용 |
| Related to: | 해당 커밋에 관련된 이슈 번호(아직 해결되지 않은 경우) |
ex) Footer에 Fixes: #1 이라고 작성하고 commit을 할 경우, 자동으로 issue #1과 매칭이 된다.
또한, Resolves: #1으로 이슈를 해결했다고 명시하면 그 이슈는 사라진다.
아래는 현재 필자가 쓰고있는 커밋 메시지 템플릿이다.
# 제목은 최대 50글자까지 아래에 작성: ex) Feat: Add Key mapping
# 본문은 아래에 작성
# 꼬릿말은 아래에 작성: ex) Github issue #23
# --- COMMIT END ---
# <타입> 리스트
# feat : 기능 (새로운 기능)
# fix : 버그 (버그 수정)
# refactor : 리팩토링
# design : CSS 등 사용자 UI 디자인 변경
# comment : 필요한 주석 추가 및 변경
# style : 스타일 (코드 형식, 세미콜론 추가: 비즈니스 로직에 변경 없음)
# docs : 문서 수정 (문서 추가, 수정, 삭제, README)
# test : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음)
# chore : 기타 변경사항 (빌드 스크립트 수정, assets, 패키지 매니저 등)
# init : 초기 생성
# rename : 파일 혹은 폴더명을 수정하거나 옮기는 작업만 한 경우
# remove : 파일을 삭제하는 작업만 수행한 경우
# ------------------
# 제목 첫 글자를 대문자로
# 제목은 명령문으로
# 제목 끝에 마침표(.) 금지
# 제목과 본문을 한 줄 띄워 분리하기
# 본문은 "어떻게" 보다 "무엇을", "왜"를 설명한다.
# 본문에 여러줄의 메시지를 작성할 땐 "-"로 구분
# ------------------
# <꼬리말>
# 필수가 아닌 optioanl
# Fixes :이슈 수정중 (아직 해결되지 않은 경우)
# Resolves : 이슈 해결했을 때 사용
# Ref : 참고할 이슈가 있을 때 사용
# Related to : 해당 커밋에 관련된 이슈번호 (아직 해결되지 않은 경우)
# ex) Fixes: #47 Related to: #32, #21
위 커밋 컨벤션을 참고하여 기능 추가에 대한 커밋 메시지를 남겨보자.
우선, $ git commit 명령어로 커밋 템플릿에 들어가보자. 템플릿은 아래와 같이 생겼다

위 템플릿에 공백 3줄이 우리가 채워넣을 line이다.
signin, signup 기능이 추가되었다고 가정해보자.
커밋 메시지는 아래와 같을 것이다.
Feat: Add signin, signup
회원가입 기능, 로그인 기능 추가(예시를 위해 간단히 작성)
Resolves: #1
템플릿에는
첫번째 줄엔 Feat: Add signin, signup
두번째 줄엔 signup과 signin을 어디에 추가했고, 왜 추가했는지에 대한 글을 남긴다.(생략 가능)
세번째 줄엔 issue에 대한 부분은 없지만 이슈1을 해결했다고 가정하자(생략 가능)
wq로 저장하고 나가면 커밋이 자동으로 된다.(vim editor임)
이런식으로 커밋을 하게 되면, 약속대로 signin, signup기능이 추가되었음을 메시지를 통해 직관적으로 알 수 있게 된다.
이 설정을 통해 앞으로 $ git commit 명령어를 통해 앞전에 만들었던 vim의 메시지가 보일 것이다.
이제 본인만의 템플릿으로 커스터마이징 해서 간편하고 똑똑하게 커밋하자.