Git Commit Message Template 사용하기(Git Commit Convention)

kukjunLEE·2023년 4월 25일
9

Git

목록 보기
2/2
post-thumbnail

본 문서는 전에 제작했었던 commit message template 문서에서 문제가 있었던 부분을 수정하고 독자가 보기 편하게 다듬었습니다. :)
Commit Message를 작성할 때 어떤 규칙을 작성해야할지 고민이신 분들, 프로젝트를 진행하면서 동일한 Commit 규칙을 설정하고 싶으신 분들이 보시면 좋을 것 같습니다.




1. Commit Message?


Git에서 Commit을 하게 되는 경우 어떤 내용을 남기는지 Message를 작성해야 합니다.

이러한 메시지는 기본적으로 제공하는 템플릿 형태로 Commit Message 를 쓰도록 설정되나, 이 템플릿을 본인이 원하는 형태로 바꿀 수 있습니다.

바꾸기 이전

바꾸기 이전에 제공하는 Commit Template은 아주 기본적인 정보만을 담고 있습니다.

기본 Commit Template을 통해서 간단하게 작성할 수 있지만, 여러 사람이 사용하다면 Commit Message가 일관성있게 작성되지 않겠죠?




바꾼 이후

이렇게 작성하게 되면 같이 프로젝트를 작성하는 여러 사람들이 Templete의 내용을 읽어보고 작성하므로 일관성있게 Commit Message가 남을 수 있을 것입니다. :) 😀





2. Commit Message 구조와 관례



Commit Message 구조

Commit Message는 기본적으로 type, title, body, resolves, see also을 가집니다.

Type : Title

Body

Resolves
See also
  • Type : Commit이 어떤 유형인지 간단하게 표현합니다.(기능추가, 버그수정)
  • Title : Commit의 제목을 표현을 표현합니다.
  • Body : Commit Message의 본문입니다. (간단한 경우 생략 가능)
  • Resolves : Commit을 통해 해결한 Issue를 적을 수 있습니다. (생략 가능)
  • See also : Commit을 할 때 참고한 Issue를 적을 수 있습니다. (생략 가능)

Commit Message는 다음과 같은 구조를 가지고 있고, 프로젝트에 참여하는 사용자들끼리 설정할 수 있지만, 원활한 프로젝트의 진행을 위해 기본적으로 지켜야하는 몇가지 규칙이 있습니다.



Commit Message 규칙

  1. 제목과 본문을 빈 행으로 구분한다.
  2. 제목을 50글자 내로 제한
  3. 제목 첫 글자는 대문자로 작성
  4. 제목 끝에 마침표 넣지 않기
  5. 제목은 명령문으로 사용하되, 과거형을 사용하지 않는다.
  6. 본문의 각 행은 72글자 내로 제한
  7. 어떻게 보다는 무엇과 왜를 설명

이런 규칙이 존재하는 이유는 여러가지가 있습니다만, 해당 기술 블로그에서 굉장히 잘 설명해주고 있어서 링크를 첨부합니다. :)

요약하면 Git Commit Message를 작성하는 이유는 Commit Message를 보고 쉽게 유추하고 문제를 해결하고, 협업하는 사용자들이 보기 좋게 하기 위함인데, 기본 규칙을 지키면 그것을 만족한다는 내용입니다.




Issue Close 기능

Commit Message에서 Git Issue를 닫을 수 있습니다.

  • 키워드 #이슈번호를 사용


해당 Issue를 닫을 수 있는 키워드는 다음과 같습니다.

  • close
  • closes
  • closed
  • fix
  • fixed
  • resolve
  • resolves
  • resolved

각 키워드마다 기능의 차이는 없고, 문법이나 맥락에 맞게 사용하면 됩니다.
다만 close 계열은 일반 개발 이슈, fix 계열은 버그 픽스나 핫 픽스 이슈, resolve 계열은 문의나 요청 사항에 대응한 이슈에 사용하면 적당하다는 관례는 있습니다.


Issue Close 예시

제목을 통해서 Issue Close

' 제목에 이슈 한 개 닫기 적용한 사례
ADD : Close #10 - implement login function

로그인 구현 기능 이슈 해결


내용을 통해서 Issue를 여러개 Close

' 내용으로 이슈 여러 개 닫기를 적용한 사례
FIX : Fix login error issue

로그인 기능을 구현했으나, 관련 fix 이슈가 많이 발생했고, 이를 해결함

' Resolve 작성 부분
Fix #21 Update Login Algorithm
Fix #24 Update Login Form




3. Commit Message Template


Commit Message Template은 Commit 작성법을 규칙으로 정하고, 그 규칙을 Template으로 만들어, 프로젝트의 여러 사용자들에게 해당 프로젝트의 GUIDE를 제공할 수 있습니다.


Commit Template 생성

Commit Template를 적용하는 방법은 해당 기기 사용자들에게 전역적으로 적용하는 방법과 프로젝트마다 적용하는 방법으로 총 두가지가 있습니다.

개인적으로 권장하는건 프로젝트마다 적용하는 것을 권장하고 있습니다.
프로젝트 사용자들끼리 규약을 정해 Template을 설정하는 거니까요.

물론 전역으로 본인만의 Templete을 만들어도 되고, 이렇게 전역에서의 설정과, 프로젝트 둘다 설정하게 되면, 프로젝트에 Commit Template가 우선시됩니다.




전역으로 Commit Template 적용하기


1. 전역으로 적용할 Git Commit Message Template을 만듭니다.

예시 Template (global-commit-template.txt)

타입 : 제목

' ----------------------------------------
' 타입 종류
' * ADD : 새로운 기능 추가
' * MODIFY : 기존 기능 수정
' * FIX : 버그 수정
' * DOCS : 문서 수정
' * CHORE : 빌드 부분 혹은 패키지 매니저 수정사항
'
' 제목 규칙
' * 제목 작성 후 공백 한줄을 포함해야, 제목과 본문이 구별됨
' * 제목 첫 글자는 대문자로 작성, 마침표를 사용하지 않음
' * 제목은 명령문으로 사용, 과거형을 사용하지 않음
'
' 본문 규칙
' * 본문 작성 후 공백 한줄을 포함, 본문과 Resolves가 구별
' * 본문의 각 행은 72글자로 제한
' * 본문은 "왜"와 "무엇을"위주로 작성
' * 본문은 행으로 구분되어야 함

2. 전역에서 config 설정을 읽을 수 있도록 git cli를 이용해서 설정해줍니다.

git config --global commit.template <template의 절대경로>



프로젝트별 Commit Template 적용하기


1. 프로젝트 최상단에 Commit Template을 만듭니다.

Template 파일 예시는 전역에서 설정한 것과 동일합니다.


2. 그 후 프로젝트의 config 설정을 읽을 수 있도록 git cli로 설정해줍니다.

git config commit.template <프로젝트  template 경로>(ex ./git-commit-tempalte.txt)>


잘 등록이 되었는지, 확인하려면 git config --list로 확인할 수 있습니다.



이렇게 작성하게 되면 이전보다 훨씬 깔끔한 commit Log를 관리할 수 있습니다.
git log로 확인할 수 있습니다.

Git Log





4. Git Commit Message Template 공유


제가 사용할 것을 만드는 김에 여러 종류의 Template을 만들어봤는데, 공유하면 좋을 것 같아서 가져와봤습니다. :)

규칙을 최소화 한 간단한 Template

타입 : 제목
' ----------------------------------------
' 타입 종류
' * ADD : 새로운 기능 추가
' * MODIFY : 기존 기능 수정
' * FIX : 버그 수정
' * DOCS : 문서 수정
' * CHORE : 빌드 부분 혹은 패키지 매니저 수정사항
'
' 제목 규칙
' * 제목 작성 후 공백 한줄을 포함해야, 제목과 본문이 구별됨
' * 제목 첫 글자는 대문자로 작성, 마침표를 사용하지 않음
' * 제목은 명령문으로 사용, 과거형을 사용하지 않음
'
' 본문 규칙
' * 본문 작성 후 공백 한줄을 포함, 본문과 Resolves가 구별
' * 본문의 각 행은 72글자로 제한
' * 본문은 "왜"와 "무엇을"위주로 작성
' * 본문은 행으로 구분되어야 함


규칙은 최소화 하지만 외부의 툴과 연동해야 하는 경우 (ex. JIRA)

[이슈 키], 타입 : 제목
' ----------------------------------------
' 타입 종류
' * ADD : 새로운 기능 추가
' * MODIFY : 기존 기능 수정
' * FIX : 버그 수정
' * DOCS : 문서 수정
' * CHORE : 빌드 부분 혹은 패키지 매니저 수정사항
'
' 제목 규칙
' * 제목 작성 후 공백 한줄을 포함해야, 제목과 본문이 구별됨
' * 제목 첫 글자는 대문자로 작성, 마침표를 사용하지 않음
' * 제목은 명령문으로 사용, 과거형을 사용하지 않음
'
' 본문 규칙
' * 본문 작성 후 공백 한줄을 포함, 본문과 Resolves가 구별
' * 본문의 각 행은 72글자로 제한
' * 본문은 "왜"와 "무엇을"위주로 작성
' * 본문은 행으로 구분되어야 함


규칙을 아주 명시적으로 강조하고, Resolve, See also도 사용하는 경우

[이슈 키], 타입 : 제목

' 본문

' Resolve: #IssueNo
' Fix: #IssueNo
' Close: #IssueNo

' See also #IssueNo

' ----------------------------------------
' 타입 종류
' * ADD : 새로운 기능 추가
' * MODIFY : 기존 기능 수정
' * FIX : 버그 수정
' * DOCS : 문서 수정
' * TEST : 테스트 코드 추가
' * TESTFIX : 테스트 코드 수정
' * REFACTOR : 코드 리팩토링
' * STYLE : 코드에 영향을 주지 않는 변경사항
' * CHORE : 빌드 부분 혹은 패키지 매니저 수정사항
'
' 제목 규칙
' * 제목 작성 후 공백 한줄을 포함해야, 제목과 본문이 구별됨
' * 제목 첫 글자는 대문자로 작성, 마침표를 사용하지 않음
' * 제목은 명령문으로 사용, 과거형을 사용하지 않음
'
' 본문 규칙
' * 본문 작성 후 공백 한줄을 포함, 본문과 Resolves가 구별
' * 본문의 각 행은 72글자로 제한
' * 본문은 "왜"와 "무엇을"위주로 작성
' * 본문은 행으로 구분되어야 함
'
' ################
' # Remember me ~ Commit Message 규칙
' ## 1. 제목과 본문을 빈 행으로 구분한다.
' ## 2. 제목을 50글자 내로 제한
' ## 3. 제목 첫 글자는 대문자로 작성
' ## 4. 제목 끝에 마침표 넣지 않기
' ## 5. 제목은 명령문으로 사용하되, 과거형을 사용하지 않는다.
' ## 6. 본문의 각 행은 72글자 내로 제한
' ## 7. 어떻게 보다는 무엇과 왜를 설명
' ################



도움이 되었다면 하트 한번만 눌러주시면 감사하겠습니다. 그리고 피드백이 있으시다면 남겨주시면 감사하겠습니다. :)



참고 문서

profile
Software Engineer

2개의 댓글

comment-user-thumbnail
2023년 4월 28일

git commit message 규약을 정하는데 큰 도움이 되었습니다. 쉽고 깔끔한 정리 감사합니다~~

1개의 답글