20241015 좋은 깃 커밋 메시지

지금까지 내맘대로 커밋 메시지를 작성해왔었는데, 커밋 메시지도 협업을 위한 가이드라인이 존재한다는 것을 알게되었다.
그래서 좋은 깃 커밋 메시지 작성 방법에 대해서 정리해보려고 한다.

AngularJS Git Commit Message Convention

이 규칙은 이 글을 참고해 정리했다.

커밋 메시지 포맷

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>


1) 커밋 유형 지정(type)

feat : 새로운 기능 추가, 기존 기능을 요구사항 변경으로 인해 변경한 경우
fix : 버그 수정
docs : 문서 수정
style : 스타일 수정(코드 포맷팅1, 세미콜론 누락 등)
refactor : 코드 리팩토링2
test : 테스트 코드 추가/수정
chore : 유지 위한 배포나 빌드 혹은 패키지와 같이 기타 작업에 대해 추가/수정


2) 범위 지정(scope)

생략 가능.
어디가 변경되었는지를 표시하는 것. 변경된 부분은 모두 들어갈 수 있다.
예를 들어, 함수가 변경되었으면 함수 이름이나 변경된 클래스 이름 등

3) 제목(subject)은 명령형, 현재형을 사용한다

X changed, changes
⃝ change

4) 제목의 첫글자는 대문자로 쓰지 않는다

5) 제목의 끝에는 마침표(.)를 찍지 않는다

6) 본문(body)에도 명령형, 현재형을 사용한다

7) 본문에는 변경한 이유와 변경 전과의 차이점을 설명한다

어떻게 보다는 무엇과 왜를 설명한다.

8) 바닥글(footer)에는 주요 변경 내역들(BREAKING CHANGE)을 언급한다

변경사항, 변경한 타당한 이유(왜 그렇게 변경했는지), 이전 버전에서 새로운 버전으로 migration하는 방법(이전 코드를 새로운 버전에 맞게 수정하는 방법)에 대한 노트가 포함되어야 한다.
예시 참고

9) 바닥글에는 해결된 이슈번호를 Closes 접두사를 이용해 적는다

Closes #234

여러 이슈가 해결되었을 때는

Closes #123, #245, #992


10) 제목은 영문 기준 50자 이내, 본문은 영문 기준 72자마다 줄을 바꾼다

11) 보는 사람이 원래 문제가 무엇인지 이해한다고 가정하지 말고 확실하게 설명을 추가한다

내 코드가 직관적으로 바로 파악 될 수 있다고 생각하지 말자

12) 제목과 본문과 바닥글은 빈행으로 구분한다


추가로 다양한 커밋 메시지 예시 볼수 있는 곳


따라서 여러 행으로 구성된 커밋 메시지를 git commit -m 을 이용해서 작성하기는 어렵다.
이때는 git commit으로 작성하고, 다음으로 적합한 편집기를 사용해 커밋 메시지를 작성하는 방법을 알아보자



깃 편집기 설정

나는 다음 명령을 실행해 VS code로 기본 편집기를 변경했다.

$ git config --global core.editor "code --wait"


이 때 만약 아래와 같은 에러가 뜬다면,

hint: Waiting for your editor to close the file… code –wait: code: command not found error: There was a problem with the editor ‘code –wait’.

VS code 에 들어가서 cmd + shift + p 를 치고 Shell Command : install 'code' command in PATH를 검색해서 클릭하면 해결된다.



커밋 메시지 템플릿 설정

커밋 메시지 템플릿 텍스트 파일을 만들어서 사용할 수 있다.

1) 템플릿 파일 생성

터미널에서 .git이 있는 폴더 위치에 아래 명령을 실행해 템플릿 파일을 생성한다.

$ touch .gitmessage.txt


2) 템플릿 파일 작성

아래 명령을 실행해 편집기를 연다.

$ vim .gitmessage.txt


i 키를 누르고 아래 내용을 복사 붙여넣기 한다.

################
# <type>(<scope>): <subject> 의 형식으로 제목을 아래 공백줄에 작성
# 제목은 명령형, 현재형 사용 / 첫글자 대문자 금지 / 변경사항이 "무엇"인지 명확히
 작성 / 끝에 마침표 금지
# 예) feat: 로그인 기능 추가

# 바로 아래 공백은 지우지 마세요 (제목과 본문의 분리를 위함)

################
# body(구체적인 내용)을 아랫줄에 작성
# 명령형, 현재형 사용 / 어떻게 보다는 무엇과 왜 설명

################
# footer를 아랫줄에 작성 (BREAKING CHANGE, 현재 커밋과 관련된 이슈 번호 추가)
# 예) Closes #7

################
# feat: 새로운 기능 추가, 기존 기능을 요구사항 변경으로 인해 변경한 경우
# fix: 버그 수정
# docs: 문서 수정
# style: 스타일 수정(코드 포맷팅, 세미콜론 누락 등)
# refactor: 코드 리팩토링
# test: 테스트 코드 추가/수정
# chore: 유지 위한 배포나 빌드 혹은 패키지와 같이 기타 작업에 대해 추가/수정
################
# 한 줄이 제목은 영문 기준 50자, 본문은 영문 기준 72자가 넘어가지 않도록 주의


ESC를 누르고 :wq + Enter를 입력해 편집기에서 나온다.

3) 템플릿 설정하기

아래 명령을 실행해 내가 작성한 파일로 템플릿 파일을 설정한다.

$ git config --global commit.template .gitmessage.txt




  1. 코드의 가독성과 이해도를 높이기 위해 스타일과 형식을 일관되게 유지하는 작업. ex. 들여쓰기, 공백, 괄호 위치, 주석 스타일 등의 일관성 

  2. 코드의 가독성을 개선하고 유지보수성을 높이기 위해 기능 변경 없이 코드 구조 따위를 재조정하는 작업. ex. 중복 코드 제거, 긴 메소드 분리, 변수명 수정 

Categories:

Updated:

Leave a comment