[Git] GIt Commit 규칙에 대해 (좋은 git commit 알아보기)
커밋 메시지가 중요한 이유
커밋 메시지는 개발자가 훌룡한 협력자로써 중요한 역할을한다.
다른 사람의 commit 과 pull-request를 검토하는 것이 수월해지고 독립적으로 이루어질 수 있다.
어떤 일이 몇 달 또는 몇 년 전에 발생한 이유에 대해 이해하는 것을 가능하게 한다.
유지관리성 차원에서 프로젝트의 로그는 강력한 도구이다.
커밋 메시지의 7가지 규칙
- 제목과 본문을 빈 줄로 구분한다.
- 제목을 50글자 내로 제한한다.
- 제목 줄은 대문자로 시작해야 한다.
- 제목 끝에 마침표를 사용하지 않는다.
- 제목에 명령형으로 사용한다.
- 본문의 각 행은 72글자 내로 제한한다.
- 본문을 사용하여 무엇을, 왜, 어떻게 설명해라.
1. 제목과 본문을 빈 줄로 구분한다.
커밋의 첫 번째 빈 줄까지의 텍스트는 커밋 제목으로 취급되며 해당 제목은 Git전체에서 사용된다.
모든 커밋의 body(본문)이 필요한 것은 아니다. 때때로 헤더로 충분하다.(변경사항이 너무 단순해 추가 컨텍스트가 필요하지 않은 경우)
만약 본문이 있는 커밋 메시지를 작성해야한다면 -m 옵션만으로 작성하기 쉽지 않기에 적절한 텍스트 편집기에서 메시지를 작성하는 것이 좋다.
로그를 탐색할 때 제목과 본문을 빈 줄로 구분하면 효과가 있다.
git log --online을 이용해 제목 줄만 인쇄할 수 있다.
git shortlog 로 사용자별 커밋을 그룹화하고 간결함을 위해 제목 줄만 다시 표시한다.
이때 제목과 본문 사이에 빈 줄이 없다면 제대로 동작하지 않는다.
2. 제목을 50글자 내로 작성한다.
50자는 필수가 아니라 권고 사항일 뿐이다. 제목줄을 50자로 유지해야 가독성이 보장되고 작성자가 진행 상황을 설명하는 간결한 방법에 대해 생각해보게 된다.
TIP 만약 커밋 제목을 요약하는데 어려움이 있다면 한 번에 너무 많은 변경사항을 커밋하려는거일지도 모른다.
각 주제에 대해 원자적 커밋(세분화)를 위해 노력해야 한다.
3. 제목 줄은 대문자로 시작해야 한다.
모든 제목은 대문자로 시작하면 된다.
Commit message (O)commit message(X)
4. 제목 끝에 마침표를 사용하지 않는다.
제목 줄에는 후행 문장 부호가 필요하지 않다. 게다가 제목은 50자 이하로 유지해야 하기에 공간은 소중하다.
Commit message (O)Commit message.(X)
5. 제목에 명령형으로 사용한다. (어떻게 보다는 무엇과 왜)
Clean your room (O)
Close the door (O)
명령이나 지시를 내리는 것처럼 명령형 분위기로 제목을 작성해야한다.
Git 자체가 사용자를 대신하여 기본 커밋을 생성할 때마다 명령형을 사용하기 때문에 Git커밋 제목으로 명령형이 완벽하다.
예를 들면 git merge을 할 때 생성되는 기본 message는 아래와 같다
Merge branch 'mytest'
git revert를 사용할 때는 아래와 같다.
Revert "Add the thing with the stuff"
This reverts commit cc~~~.
따라서 명령형 커밋 메시지를 작성할 때 Git자체의 기본 제공 규칙을 따르는 것이다.
이런식으로 명령형 글을 쓰는 것이 조금 어색할 수 있다.
제대로 구성된 Git 커밋 제목 줄은 항상 다음 문장을 완성할 수 있어야한다.
- If applied, this commit will your subject line here
예를 들어 아래와 같다.
- If applied, this commit will refactor subsystem X for readability
- If applied, this commit will update getting started documentation
- If applied, this commit will remove deprecated methods
명령형 사용은 제목 줄에서만 중요하다. 본문을 작성할 때에는 이 규칙을 사용하지 않아도 된다.
6. 본문의 각 행은 72글자 내로 제한한다.
Git은 텍스트를 자동으로 줄 바꿈하지 않는다. 커밋 메시지의 본문(body)를 작성할 때 오른쪽 여백에 유의하고 텍스트를 수동으로 줄 바꿈해야한다.
권장 사항은 72자 에서 줄 바꿈을 수행하는 것이다. 그래야 Git이 텍스트를 전체적으로 80자 미만으로 유지하면서 텍스트 들여쓰기를 할 수 있는 충분한 공간이 있다.
텍스트 편집기를 이용해 Git 커밋을 작성할 때 텍스트를 72자로 줄 바꿈하도록 Vim을 구성할 수 있다.
7. 본문을 사용하여 무엇을, 왜, 어떻게 설명해라.
변경사항을 설명할 때는 왜 해당 변경을 수행했는지, 변경 이전의 동작 방식과 문제점, 변경 후의 동작 방식 및 선택한 해결방법에 대해 명확하게 설명하는 것이 중요하다.
이러한 설명과 기록을 제공함으로써 미래의 유지보수에 강한 이점이 있다. 설명을 통해 자신의 코드를 이해하기 쉽고 문제를 해결하는데 충분한 도움이 되도록 정보를 제공하는 것이 중요하다.
커밋 메시지 구조
<type> (<scope>) : <subject> -- 헤더
<BLANK LINE>
<body> -- 본문
<BLANK LINE>
<footer> -- 바닥글
<type> 은 해당 커밋의 성격을 나타내며 아래 중 하나를 사용하면 된다.
Feat : 새로운 기능에 대한 커밋
Fix : 버그 수정에 대한 커밋
Build : 빌드 관련 파일 수정에 대한 커밋
Chore : 그 외 자잘한 수정에 대한 커밋
Ci : CI(Continuous Integration)관련 설정 수정에 대한 커밋
Docs : 문서 수정에 대한 커밋
Style : 코드 스타일 혹은 포맷 등에 관한 커밋
Refactor : 코드 리팩토링에 대한 커밋
Test : test 코드 수정에 대한 커밋
<body>는 본문으로써 헤더로 표현할 수 없는 상세한 내용을 적는다. (생략가능)
<footer>는 바닥글로써 어떤 이슈에서 왔는지 참조 정보들을 추가하는 용도로 사용한다.
예를 들어 특정 이슈를 참조하려면 clone #번호 와 같이 추가하면된다.
How to Write a Git Commit Message
Commit messages matter. Here's how to write them well.
cbea.ms