IT/고찰

Commit Message에 대한 고찰

Terriermon 2023. 8. 2. 15:56

회사 프로젝트를 진행하면서 메시지가 담고 있는 의미에 대해서 종종 생각하게 되었습니다.

코드로 모든 걸 나타낼 수 있다면 가장 좋겠지만, 코드에 온전히 나의 의도를 담는 것은 쉽지 않습니다.

따라서, 가장 자주 사용하는 메시지인 Coimmit, Comment, Log의 작성법에 대해서 정리해보고자 합니다.

 

메시지를 잘 적는 것은 협업에서 반드시 필요한 기본적인 습관입니다. 기록으로 소통이 가능하기 때문입니다.


Commit Message

필요성

1. Git을 사용하면 반드시 커밋 메시지를 남기도록 되어있습니다. 그렇기 때문에 많은 개발자들은 의미없이 커밋 메시지를 적기도 합니다.

 ex) "제발", "이번엔 성공" 등

2. 커밋메시지는 단순히 소스코드를 올리거나 억울함을 호소하기 위한 것이 아닙니다.

 

코드의 변경사항을 요약하는 Message

1. 협업과 효율성: 변경 내역을 쉽게 파악할 수 있어 서로 작업에 대한 이해를 높힐 수 있습니다.

2. 문제 해결: 문제 발생 시, 쉽게 디버깅이 가능합니다. 언제 어디서 문제가 발생했는지 쉽게 식별할 수 있습니다.

 

 

Commit Message Convention

정해진 규칙에 따라 메시지리를 기재하여 더욱 효율적인 프로젝트 환경을 만들 수 있습니다.

> 가독성이 높아져 불필요한 의사소통을 최소한으로 만듭니다.

> 다양한 Git 명령어(Git blame, revert, rebase, log)등을 효율적으로 사용 가능합니다.

 

 

https://cbea.ms/git-commit/

커밋 메시지 작성 시 참고하면 좋은 7가지 규칙을 소개한 사이트입니다. 영어 기준으로 되어 있어서 조금 더 유연한 적용이 가능합니다.

1. 제목과 본문을 한 줄로 띄워 분리
2. 제목은 영문 기준 50자 이내
3. 제목 첫 글자는 대문자
4. 제목 끝에 마침표(.) 금지
5. 제목은 명령조
6. 본문은 영문 기준 72자마자 줄 바뀍
7. 본문은 어떻게보다 무엇을, 왜에 맞춰서 작성

 

위 7가지 규칙은 커밋메시지를 최대한 간결하고 일관성 있도록 쓰는 것을 강조합니다.

- 제목과 본문을 한 줄로 띄어 분리하게 되면 git log --oneline 명령어 시, 제목으로만 간단히 커밋 내용을 유추할 수 있습니다.

- Git의 Built-in Convention은 제목을 명령문으로 사용하고 있습니다. Merge bracnh 'feature'은 git에서 자동 실행하는 커밋 메시지의 기본값입니다. 이에 맞춰서 Release version 1.0.0과 같이 제목을 실행한다면 자연스럽게 Built-in Convention과 맞출 수 있습니다.

 

 

반드시 위 7가지 규칙을 넣어서 컨벤션을 작성할 필요는 없습니다. 그러나 컨벤션을 적용하면 어떤 수정사항이 있는 지 한 눈에 쉽게 알아 볼 수 있습니다.

컨벤션이 적용되지 않은 커밋 메시지 컨벤션이 적용된 커밋 메시지

출처: 과거의 나



출처: https://github.com/naver/egjs-flicking/commits/nightly

 

커밋 메시지 구조

type: subject

body

footer

 

- Type: 변경 사항의 유형, 아래 Type 영어 참조

- Subject: 변경 작업의 제목이나 간단한 요약, 대문자로 시작하고 마침표를 사용하지 않음

- (Option)Body: 작업 내용이 복잡하거나 상세한 내용을 남겨야 하는 경우에 작성. 무엇 고쳤는지에 대해서 상세하게 적음. 한 줄에 72자 이내

- (Option)Footer: 코드 작업과 관련 이슈 번호 또는 참고 링크 추가

 

예시

fix: 신규 가입 시 사용자 전화번호 공백 수정

- 사용자 전화번호가 12자리로 입력되면 정상적으로 표시
- 전화번호 자릿수가 11자리인 경우, 저장을 하지 않아 공백으로 표시하는 내용 수정
- ...

Resolves: #123456

 

타입을 적용하여 간단하게 커밋 메시지를 작성한 내용입니다. Type과 Subject은 필수로 입력하고 그 외에 Body, Footer는 필요한 경우에만 입력하면 됩니다.

 

최종적으로 위 내용들을 요약하여 커밋메시지 형태로 표현한 내용입니다.

feat: Summarize changes in around 50 characters or less

 More detailed explanatory text, if necessary. Wrap it to about 72
 characters or so. In some contexts, the first line is treated as the
 subject of the commit and the rest of the text as the body. The
 blank line separating the summary from the body is critical (unless
 you omit the body entirely); various tools like `log`, `shortlog`
 and `rebase` can get confused if you run the two together.

 Explain the problem that this commit is solving. Focus on why you
 are making this change as opposed to how (the code explains that).
 Are there side effects or other unintuitive consequenses of this
 change? Here's the place to explain them.

 Further paragraphs come after blank lines.

 - Bullet points are okay, too

 - Typically a hyphen or asterisk is used for the bullet, preceded
    by a single space, with blank lines in between, but conventions
    vary here

 If you use an issue tracker, put references to them at the bottom,
 like this:

 Resolves: #123
 See also: #456, #789

 

자주 쓰는 Type 영어

영어 단어 사용 패턴 비고
fix 올바르지 않은 동작을 고친 경우 오타수정: fix typo
feat 새로운 기능 추가 또는 업데이트  
add 코드, 테스트, 예제, 문서 등 추가  
remove 코드 삭제 clean, eliminate를 사용하기도 함
comment 주석 수정 및 삭제  
refactor 전면 수정이 있을 때, 코드만 개선  
update 개정이나 버전 업데이트가 있을 때
- 정상동작하고 있지만 수정/추가/보완하는 것
주로 문서, 리소스, 라이브러리 등 사용
docs: 문서 개정
chore 빌드, 패키지 관련 업데이트  
test 테스트 코드 추가  
correct 문법 오류, 타입 변경, 이름 변경 등 오타수정: fix type

그 외

use(무언가를 사용해 구현), simplify(복잡한 코드 단순화), implement(구현체 완성), ensure(확실하게 보장되는 것을 명시, i문 등), prevent(특정한 처리를 막음), avoid(회피), verify(검증 코드 추가), improve(호환성 등 기능 향상), make(기존 동작 변경), allow(허용), rename(이름 변경), move(코드 이동), set(변수 값 변경 등 작은 수정), pass(파라메터를 넘기는 처리)

 

 

Commit을 해야하는 시기

너무 자주하게 되면 이슈 트래킹에 불편함을 겪을 수 있습니다. 정답은 없지만 의미있는 코드 변화가 생기면 커밋을 하는 것을 권장합니다.

1. 기능에 대한 테스트가 끝났을 때
2. 기능 기반으로 커밋
 - 새로운 기능/작동하는 메소드 추가
3. 새로운 테스트 케이스 추가, 테스트 통과, 변수 이름 변경 등 의미있는 코드 변화가 있을 때

 

 

 

참고문헌

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

https://yozm.wishket.com/magazine/detail/1974/

https://blog.munilive.com/posts/my-git-commit-guide.html

'IT > 고찰' 카테고리의 다른 글

Git과 SVN 고찰  (0) 2024.06.19
Log에 대한 고찰  (0) 2023.08.25
Comment에 대한 고찰  (0) 2023.08.15