커밋 메시지 컨벤션은 프로젝트에서 사용되는 규칙이나 패턴을 따르는 커밋 메시지의 형식을 말합니다. 이 규칙은 주로 프로젝트의 품질을 향상시키고 협업을 더 효과적으로 만들기 위해 사용됩니다.
- 일관성과 가독성 유지:
- 커밋 컨벤션은 일관된 형식으로 커밋 메시지를 작성하도록 도와줍니다.
- 일관성 있는 메시지는 코드 변경 사항을 이해하기 쉽게 만들어 코드 리뷰 및 협업을 간편하게 합니다.
- 프로젝트 이력 관리:
- 좋은 커밋 메시지는 코드 변경 이력을 체계적으로 관리할 수 있게 합니다.
- 특정 기능이나 이슈에 대한 변경 사항을 쉽게 찾을 수 있으며, 코드 상태를 원하는 시점으로 돌아가기 용이합니다.
- 자동화 및 통합 향상:
- 커밋 컨벤션은 자동화된 프로세스와의 통합을 용이하게 합니다.
- 일부 프로젝트는 커밋 메시지를 기반으로 자동으로 버전 관리, 릴리스 노트 생성 등을 수행하여 효율성을 높이고 오류를 방지할 수 있습니다.
type : subject <----- 제목
body <----- 본문
footer <----- 꼬리말
커밋메시지의 타입(type) 은 아래와 같은 규약을 지키면서 작성한다
태그: 제목
타입은 " tag: subject " 으로 구성되며, 태그는 영어로 쓰되, 첫 문자는 대문자 로 한다.
※ (:뒤에 space 가 있음)
_ex) Fix: Modified user config (Feat 가 태그이고, Modify user config 가 제목임)
| Tag Name | Description |
|---|---|
| Feat | 새로운 기능을 추가 |
| Fix | 버그 수정 |
| Design | CSS 등 사용자 UI 디자인 변경 |
| !BREAKING CHANGE | 커다란 API 변경의 경우 |
| !HOTFIX | 급하게 치명적인 버그를 고쳐야하는 경우 |
| Style | 코드 포맷 변경, 세미 콜론 누락, 코드 수정이 없는 경우 |
| Refactor | 프로덕션 코드 리팩토링 |
| Comment | 필요한 주석 추가 및 변경 |
| Docs | 문서 수정 |
| Test | 테스트 코드, 리펙토링 테스트 코드 추가, Production Code 변경 없음 |
| Chore | 빌드 업무 수정, 패키지 매니저 수정, 패키지 관리자 구성 등 업데이트, Production Code 변경 없음 |
| Rename | 파일 혹은 폴더명을 수정하거나 옮기는 작업만인 경우 |
| Remove | 파일을 삭제하는 작업만 수행한 경우 |
제목은 다음의 규칙을 지킨다.
- 제목은 50글자 이내로 작성한다.
- 첫글자는 대문자로 작성한다.
- 마침표 및 특수기호는 사용하지 않는다.
- 영문으로 작성하는 경우 동사(원형)을 가장 앞에 명령어로 작성한다.
- 과거시제는 사용하지 않는다.
- 간결하고 요점적으로 즉, 개조식 구문으로 작성한다.
* Fixed --> Fix * Added --> Add * Modified --> Modify
본문은 다음의 규칙을 지킨다.
- 72이내로 작성한다.
- 최대한 상세히 작성한다. (코드 변경의 이유를 명확히 작성할수록 좋다)
- 어떻게 변경했는지보다 무엇을, 왜 변경했는지 작성한다.
꼬릿말은 다음의 규칙을 지킨다.
- 꼬리말은 optional이고 이슈 트래커 ID를 작성한다.
- 꼬리말은 "유형: #이슈 번호" 형식으로 사용한다.
- 여러 개의 이슈 번호를 적을 때는 쉼표(,)로 구분한다.
- 이슈 트래커 유형은 다음 중 하나를 사용한다.
- Fixes : 이슈 수정중 (아직 해결되지 않은 경우)
- Resolves : 이슈를 해결했을 때 사용
- Ref : 참고할 이슈가 있을 때 사용
- Related to : 해당 커밋에 관련된 이슈번호 (아직 해결되지 않은 경우)
ex )Fixes: #45 Related to: #34, #23
Feat: "회원 가입 기능 구현"
SMS, 이메일 중복확인 API 개발
Resolves: #123
Ref: #456
Related to: #48, #45
| Emoji | Description |
|---|---|
| 🎨 | 코드의 형식 / 구조를 개선 할 때 |
| 📰 | 새 파일을 만들 때 |
| 📝 | 사소한 코드 또는 언어를 변경할 때 |
| 🐎 | 성능을 향상시킬 때 |
| 📚 | 문서를 쓸 때 |
| 🐛 | 버그를 reporting할 때, @FIXME 주석 태그 삽입 |
| 🚑 | 버그를 고칠 때 |
| 🐧 | 리눅스에서 무언가를 고칠 때 |
| 🍎 | Mac OS에서 무언가를 고칠 때 |
| 🏁 | Windows에서 무언가를 고칠 때 |
| 🔥 | 코드 또는 파일 제거할 때, @CHANGED 주석 태그와 함께 |
| 🚜 | 파일 구조를 변경할 때, 🎨과 함께 사용 |
| 🔨 | 코드를 리팩토링 할 때 |
| ☔️ | 테스트를 추가 할 때 |
| 🔬 | 코드 범위를 추가 할 때 |
| 💚 | CI 빌드를 고칠 때 |
| 🔒 | 보안을 다룰 때 |
| ⬆️ | 종속성을 업그레이드 할 때 |
| ⬇️ | 종속성을 다운 그레이드 할 때 |
| ⏩ | 이전 버전 / 지점에서 기능을 전달할 때 |
| ⏪ | 최신 버전 / 지점에서 기능을 백 포트 할 때 |
| 👕 | linter / strict / deprecation 경고를 제거 할 때 |
| 💄 | UI / style 개선시 |
| ♿️ | 접근성을 향상시킬 때 |
| 🚧 | WIP (진행중인 작업)에 커밋, @REVIEW 주석 태그와 함께 |
| 💎 | New Release |
| 🔖 | 버전 태그 |
| 🎉 | Initial Commit |
| 🔈 | 로깅을 추가 할 때 |
| 🔇 | 로깅을 줄일 때 |
| ✨ | 새로운 기능을 소개 할 때 |
| ⚡️ | 도입 할 때 이전 버전과 호환되지 않는 특징, @CHANGED 주석 태그 사용 |
| 💡 | 새로운 아이디어, @IDEA 주석 태그 |
| 🚀 | 배포 / 개발 작업 과 관련된 모든 것 |
| 🐘 | PostgreSQL 데이터베이스 별 (마이그레이션, 스크립트, 확장 등) |
| 🐬 | MySQL 데이터베이스 특정 (마이그레이션, 스크립트, 확장 등) |
| 🍃 | MongoDB 데이터베이스 특정 (마이그레이션, 스크립트, 확장 등) |
| 🏦 | 일반 데이터베이스 별 (마이그레이션, 스크립트, 확장명 등) |
| 🐳 | 도커 구성 |
| 🤝 | 파일을 병합 할 때 |
[Git] Commit Message Convension (협업을 위한 git 커밋컨벤션)
Git | git 커밋 컨벤션 설정하기