1. Atomic Commits; 커밋을 원자적으로 유지하기
하나의 주제에 속한 것만 커밋하는 것을 권장합니다.
코드리뷰, undo, rollback이 용이해지기 때문입니다.
따라서 커밋을 단일 작업에 집중할 수 있도록 분류해야 합니다.
(파일 하나를 커밋하라는 것이 아닙니다, 기능, 변화, 수정 등 기본 단위 별로 커밋하라는 것을 의미합니다)
예컨대 사용자 계정 기능은 로그인 기능, 로그아웃 기능 등으로 구분할 수 있습니다.
2. Commit Message
메시지 작성을 위한 에디터
git commit 시 긴 내용을 포함한다면 git commit -m 사용이 어려울 수 있습니다.
이 때, 에디터를 사용합니다.
특정 에디터를 사용하도록 설정하려면 git config 명령어를 사용합니다.
공식 문서에 특정 에디터 별 명령어가 있습니다.
https://git-scm.com/book/en/v2/Appendix-C%3A-Git-Commands-Setup-and-Config
vscode
git config --global core.editor "code --wait"
(vscode 경로가 PATH에 포함되도록 설정이 되어있어야 합니다)
nano
git config --global core.editor "nano -w"
vim
git config --global core.editor "vim --nofork"
구조
git docs에 따르면,
커밋 메시지는 한 줄 요약(50 char 이내)으로 시작하고,
그 다음 한 줄을 비우고, 그 다음에 더 자세한 설명을 추가하는 것을 권장합니다.
첫 번째 줄부터 빈 줄까지의 텍스트가 제목으로 취급되기 때문입니다.
#로 시작되는 것은 제외됩니다.
커밋 메시지 제목(50자 이내)
세부 내용
#제외되는 메시지
인코딩
일반적으로 UTF-8로 인코딩됩니다.
(UTF-8은 강제사항이 아닙니다, 프로젝트에 따라 유연하게 인코딩합니다)
UTF-8을 사용하지 않는다면 .git/config 파일에 인코딩에 대한 설정을 명시합니다.
[i18n]
commitEncoding = ISO-8859-1
[i18n]
logOutputEncoding = ISO-8859-1
시제
또한, 현재시제의 명령형 메시지 사용을 권장합니다.
(makes a do b 대신에 make a do b를 권장합니다)
그러나, 과거시제를 사용할 수도 있습니다.
타인의 커밋 로그를 확인하고 그 커밋이 의미하는 것을 확인할 때,
과거시제가 더 적합해보이기도 합니다.
Renamed(이름을 변경함)
Rename(이름을 변경해라)
다만 git에서 Merge, Rebase라고 사용하지 Merging, Merged, Reabased라고 사용하지 않기 때문에,
이러한 부분을 고려하여 일관성을 유지하고자 한다면, 현재시제 명령문이 적합해보이기도 합니다.
중요한 것은 일관성을 유지하는 것,
속한 곳의 가이드라인을 따르는 것입니다.