본문 바로가기
Git

Git 커밋 컨벤션

by brother_stone 2022. 10. 31.

git을 혼자 사용할 때야 나만 알아볼 수 있으면 그만이지만, 협업을 위해서는 다른 사람도 쉽고 빠르게 알아볼 수 있도록 로그를 작성하는 게 중요하다.

 

그래서 이번 포스팅에서는 통상적으로 사용되는 Git의 커밋 메시지 컨벤션과 규칙에 대해 작성해보고자 한다.

 

좋은 커밋 메시지를 작성하기 위한 7가지 규칙

  1. 제목과 본문을 한 줄 띄워 분리하기
  2. 제목은 50자 이내로
  3. 제목 첫글자를 대문자로
  4. 제목 끝에 . 금지
  5. 제목은 명령문(동사원형)으로, 과거형 금지
  6. 본문은 72자마다 줄 바꾸기
  7. 본문은 어떻게 보다 무엇을, 왜에 맞춰 작성하기

 

Commit message 구조

커밋 메시지는 제목, 본문, 꼬리말로 구분하며 각 파트는 빈 줄로 구분한다.
type: subject

body

footer

 

Commit Type

<타입>[적용 범위(선택 사항)]: <설명> 형식으로 작성하되
<설명>은 콜론 뒤 하나의 공백을 유지하고 작성한다.
타입의 첫 문자는 대문자로 작성한다.
  • feat: 새로운 기능 추가
  • fix: 버그 수정
  • docs: 문서 수정
  • style: 코드 스타일, 포맷팅에 대한 수정 (코드에 영향을 주지 않는 변경사항)
  • refactor: 코드 리팩토링
  • test: 테스트 코드, 리팩토링 테스트 코드 추가
  • chore: 빌드 업무 수정, 패키지 매니저 수정
  • ci: ci구성파일 및 스크립트 변경
  • perf: 성능 개선

 

Subject

  • 제목은 최대 50글자. 마침표, 특수기호 사용x
  • 제목은 개조식 구문으로 작성. 즉, 서술형 문장이 아닌, 간결한 요점 작성을 의미.

Body

  • 본문은 한줄 당 72글자 이내.
  • 본문 내용은 양에 구애받지 않고 최대한 자세하게 작성.
  • 본문 내용은 어떻게 변경했는지 보다 무엇, 혹은 왜 변경했는지 설명.

footer

  • 꼬리말은 선택사항이고  이슈 트래커 ID를 작성.
  • 꼬리말은 "유형: #이슈 번호" 형식으로 작성.
  • 여러 개의 이슈 번호를 적을 때는 쉼표( , )로 구분.
  • 이슈 트래커 유형은 다음 중 하나를 사용.
    • Fixes: 이슈 수정 중
    • Resolves: 이슈를 해결했을 때 사용.
    • Ref: 참고할 이슈가 잇을 때 사용
    • Related to: 해당 커밋에 관련된 이슈 번호(아직 해결되지 않은 경우)
    • ex) Fixes: #45 Related to: #34, #23

 

Commit 예시

Feat: 소셜 로그인 기능 구현

기존 로그인 방식에 카카오, 네이버, 구글 소셜 로그인 기능을 추가함

Resolves: #37
Ref: #138
Related to: #48, 23

 

커밋 메시지로 Github 이슈(issue) 자동 종료시키기

Github에는 커밋 메시지에 특정 단어를 사용해 이슈를 종료시키는 기능이 탑재되어 있다.
키워드 #이슈번호

이슈 종료로 인식하는 키워드

  • close
  • closes
  • closed
  • fix
  • fixes
  • fixed
  • reslove
  • resloves
  • resolved

각 키워드마다 기능에 차이는 없고 문법이나 맥락에 맞게 사용하면 된다.

다만 close계열은 일반 개발 이슈, fix계열은 버그 픽스나 핫 픽스 이슈, resolve계열은 문의나 요청 사항에 대응한 이슈에 사용하는 관례가 있다.

 

위 키워드를 포함한 커밋을 작성해 푸시했을 때 푸시한 브랜치에 따라 이슈가 자동으로 닫힌다.

main브랜치에 푸시했다면 즉시 해당 번호의 이슈가 닫히지만, 다른 브랜치에 푸시했다면 나중에 main브랜치로 merge되엇을 때 이슈가 닫히게 된다.

 

 

 

 

레퍼런스

https://meetup.toast.com/posts/106

https://velog.io/@shin6403/Git-git-%EC%BB%A4%EB%B0%8B-%EC%BB%A8%EB%B2%A4%EC%85%98-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

https://medium.com/humanscape-tech/%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-commit-message-%EC%9E%91%EC%84%B1%EC%9D%84-%EC%9C%84%ED%95%9C-conventional-commits-ae885898e754