Conventional Commits를 사용한 Git 커밋
개요
Conventional Commits 사양을 사용하여 표준화되고 의미론적인 git 커밋을 생성합니다. 실제 diff를 분석하여 적절한 타입, 범위 및 메시지를 결정합니다.
Conventional Commit 형식
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
커밋 타입
| 타입 | 목적 |
|---|---|
feat | 새로운 기능 |
fix | 버그 수정 |
docs | 문서만 변경 |
style | 포맷팅/스타일 (로직 없음) |
refactor | 코드 리팩토링 (기능/수정 없음) |
perf | 성능 개선 |
test | 테스트 추가/수정 |
build | 빌드 시스템/의존성 |
ci | CI/설정 변경 |
chore | 유지보수/기타 |
revert | 커밋 되돌리기 |
주요 변경 사항 (Breaking Changes)
# 타입/범위 뒤에 느낌표
feat!: remove deprecated endpoint
# BREAKING CHANGE 푸터
feat: allow config to extend other configs
BREAKING CHANGE: `extends` 키 동작이 변경됨
워크플로우
1. Diff 분석
# 파일이 스테이징된 경우, 스테이징된 diff 사용
git diff --staged
# 스테이징된 것이 없으면, 작업 트리 diff 사용
git diff
# 상태도 확인
git status --porcelain
2. 파일 스테이징 (필요한 경우)
아무것도 스테이징되지 않았거나 변경 사항을 다르게 그룹화하려는 경우:
# 특정 파일 스테이징
git add path/to/file1 path/to/file2
# 패턴으로 스테이징
git add *.test.*
git add src/components/*
# 대화형 스테이징
git add -p
절대 비밀 정보를 커밋하지 마십시오 (.env, credentials.json, private keys).
3. 커밋 메시지 생성
커밋 메시지는 제목과 본문 모두 엄격하게 영어로만 작성해야 합니다. 리포지토리 기록에 러시아어 커밋이 포함되어 있어도 커밋 메시지를 러시아어로 절대 작성하지 마십시오.
diff를 분석하여 다음을 결정합니다:
- Type: 이 변경의 종류는 무엇인가?
- Scope: 어떤 영역/모듈이 영향을 받았는가?
- Description: 변경된 내용을 한 줄로 요약 (현재 시제, 명령형, 72자 미만)
4. 커밋 실행
# 한 줄
$ git commit -m "<type>[scope]: <description>"
# 본문/푸터가 있는 여러 줄
git commit -m "$(cat <<'EOF'
<type>[scope]: <description>
<optional body>
<optional footer>
EOF
)"
모범 사례
- 커밋 메시지는 엄격하게 영어로만 작성하십시오 (제목과 본문)
- 논리적 변경 하나당 하나의 커밋
- 현재 시제: "added" 대신 "add"
- 명령형: "fixes bug" 대신 "fix bug"
- 이슈 참조:
Closes #123,Refs #456 - 설명은 72자 미만으로 유지
Git 안전 프로토콜
- 절대 git config를 업데이트하지 마십시오
- 명시적인 요청 없이 파괴적인 명령(--force, hard reset)을 실행하지 마십시오
- 사용자가 요청하지 않는 한 절대 훅을 건너뛰지(--no-verify) 마십시오
- main/master에 강제 푸시(--force push)하지 마십시오
- 훅으로 인해 커밋이 실패하면, 수정(amend)하지 말고 새 커밋을 만드십시오
- 사용자에게 명시적으로 먼저 묻지 않고 새 브랜치를 절대 생성하지 마십시오. 사용자가 브랜치를 요청하지 않는 한 현재 브랜치(main 포함)에 직접 커밋하십시오. "안전을 위해" 자동으로 브랜치를 생성하지 마십시오 — 사용자가 브랜칭을 관리합니다. 브랜치가 필요하다고 생각되면 생성하기 전에 사용자에게 물어보십시오.
- 사용자가 요청하지 않은 경우 새 원격 브랜치로 푸시하거나 MR/PR을 열지 마십시오.