이끌든지 따르든지 비키든지

Framework

[Git] 좋은 Commit Message

SeongHo5 2023. 10. 16. 10:47

코드 작성에 Code Convention이 있듯이, 깃 커밋 메시지에도 Commit Message Convention과 규칙이 존재하는데, 이 내용을 정리해봤다.

 

Commit Message Convention

커밋 메시지는 제목, 본문, 꼬리말로 구성하고, 각 항목에는 아래의 내용을 작성한다.
(※ 중요 : 항목 간의 구분은 한 줄 공백으로!)

 


 

제목 : [Commit Type]: [Commit Message][#Issue Number]

내가 코드를 작성한 의도와 짧은 요약을 작성한다. 내 의도를 type으로 명시하고, 내용은 명령조로 작성한다.

(마침표는 쓰지 않음! / 영문으로 작성하는 경우 50자 이내, 첫 글자는 대문자로)

 

■ Commit Type
      · feat : 기능 추가
      · fix : 버그 수정
      · refactor : 리팩토링
      · docs : 문서 수정
      · test : 테스트 또는 테스트 코드 추가
      · style: 코드 포맷팅, 세미콜론 누락, 코드 의미에 영향 없는 변경
      · build: 빌드 시스템 수정, 외부 종속 라이브러리 수정(gradle, npm 등)
      · rename : 파일명 또는 폴더명 수정
      · remove : 코드 또는 파일 삭제
      · chore : 그 외 자잘한 수정

 

 

본문 : [Commit Description]

- 본문은 생략 가능하다.
- 본문과 제목은 한 줄 띄워 분리한다.
- 한 줄에 72자를 넘기지 않고, 무엇을, 왜 했는지 설명한다.
- 어떻게 했는지는 작성하지 않는다.
- 본문은 명령문으로 작성하지 않아도 된다.

 

 

꼬리말 : 커밋과 연관된 issue를 명시하려는 경우, 꼬리말에 issue tracker를 작성한다.

■ Issue Tracker
      · Fixes : 해당 이슈를 수정 중인 경우 
      · Resolves : 해당 이슈를 해결한 경우 
      · Ref : 참조할 이슈가 있을 때
      · Related to : 이 커밋과 관련된 이슈 

왜 제목을 명령조로 작성해야 하나?

refactor: Removed unnecessary comments from User class

- Removed commented-out code and outdated comments
- Enhances code cleanliness and reduces clutter

 

User 클래스에서 불필요한 주석을 제거했다는 커밋 메시지 예시이다.

이 메시지를 한글로 번역하면,

 

refactor : 유저 클래스 불필요한 주석 제거함

- 주석 처리된 코드와 오래된 주석 제거했음
- 코드 청결함 향상 ···

 

커밋 메세지를 확인하는 입장에서 과거 기록을 보는 것이니, 명령조보다 설명문이 훨씬 자연스러워 보일 수 있다.

그럼에도 명령조로 제목을 작성하는 이유는 자동 메시지로 채워진 커밋 사이에 자연스레 녹아들기 위해서라고 한다.

 

Pull Request나 Merge 할 때 자동 생성되는 메시지를 보면,

 

  • Revert "Remove unnecessary comments from User class"
  • Merge pull request #2 from dev/feature

 

명령문으로 커밋 메세지를 생성하고 있는 걸 볼 수 있다.

 

영문으로 제목을 작성하는데, 내가 명령조로 작성을 제대로 한 게 맞는지 헷갈린다면 문장 앞에

  • If applied, this commit will

을 붙여 자연스레 해석되는지 확인해 보면 이해가 빠를 것이다.

 

(자연스러운 문장 예시)

  • (If applied, this commit will) Remove unnecessary comments and whitespace
  • (If applied, this commit will) Bump version to 2.0.0

제목의 첫 글자는 대문자로 하는 규칙 관련

 

글을 쓰면서 찾아보니, 제목의 첫 글자를 대문자로 할지, 소문자로 할 지에 의견이 꽤 갈리는 것 같다.

영어 문법에 맞게 첫 글자는 대문자로 하는게 맞는 것 같긴 한데.... 팀에서 소문자로 쓰고 있다면 그냥 규칙을 따르도록 하자.

 

 

참고 : 

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

https://kdjun97.github.io/git-github/commit-convention/#body-rule