---
description: staged 변경사항과 최근 커밋을 분석하여 컨벤션에 맞는 커밋 메시지를 만들고, 여러 논리적 변경이 섞였으면 나눠서 커밋
allowed-tools: Bash(git status:*), Bash(git diff:*), Bash(git log:*), Bash(git commit:*), Bash(git add:*), Bash(git restore:*)
---

# 자동 커밋 생성기

프로젝트의 커밋 컨벤션과 staged 변경사항을 분석하여 적절한 커밋 메시지를 생성합니다. 서로 다른 변경이 섞여 있으면 나눠서 커밋하는 안을 제안합니다.

## 컨텍스트 정보

**최근 커밋 히스토리 (컨벤션 분석용):**
!`git log --oneline -20`

**Staged 변경사항 요약:**
!`git diff --cached --stat`

**작업 트리 상태 (참고용):**
!`git status --short`

## 작업 순서

1. **커밋 컨벤션 분석**
   - 위 커밋 히스토리에서 패턴 식별 (예: `type: message`, `type(scope): message`, `[type] message`, 이모지 사용 등)
   - 사용 언어 확인 (한국어/영어 등)
   - 메시지 스타일 파악 (명령형, 과거형 등)

2. **Staged 변경사항 이해**
   - 변경 내용은 파일별로 필요한 만큼만 봅니다: `git diff --cached -- <파일>`
   - lock 파일, 빌드 산출물, 자동 생성 파일은 내용까지 읽지 않고 요약의 줄 수만 봅니다
   - 어떤 파일이 수정/추가/삭제되었는가? 이 변경들의 주요 목적은 무엇인가?
   - 별도 커밋으로 나눠야 할 여러 논리적 변경이 섞여 있는가? 특히 구조 변경(리팩토링, 파일 이동)과 동작 변경(기능, 버그 수정)이 섞여 있는가?

3. **커밋 계획 세우기**
   - 논리적 변경이 하나면 커밋 하나로 갑니다.
   - 여러 개가 섞여 있으면 **나눠서 커밋하는 안**을 만듭니다: 묶음마다 파일 목록과 커밋 메시지.
   - 한 파일 안의 변경을 둘로 나눠야 하는 경우는 지원하지 않습니다(`git add -p` 같은 대화형 명령은 쓸 수 없음). 그 파일은 가장 관련 있는 묶음에 넣고, 그렇게 했다고 알립니다.

4. **커밋 메시지 생성 및 확인**
   - 감지된 컨벤션 패턴 따르기 (type prefix, scope 등)
   - **한국어로 작성** (기존 히스토리가 영어여도)
   - **간결하게, 가능하면 1줄** (권장 50자, 최대 72자)
   - body는 정말 필요할 때만 추가
   - **Co-Authored-By footer 추가 금지**
   - **커밋 계획(나누는 경우 묶음별 파일과 메시지)을 사용자에게 보여주고 확인받기**
   - 사용자가 하나로 커밋하길 원하거나 수정을 원하면 반영 후 다시 확인

5. **커밋 실행**
   - **사용자가 승인한 후에만** 실행
   - 커밋 하나: `git commit -m "message"`
   - 나눠서 커밋: `git restore --staged <이번 계획의 파일들>`로 stage를 푼 뒤, 묶음마다 `git add <파일들>` → `git commit -m "message"`를 반복합니다. 처음부터 staged가 아니던 파일은 건드리지 않습니다.
   - body가 필요하면 멀티라인 포맷 사용
   - **커밋 메시지에 Co-Authored-By 절대 포함 금지**
   - 끝나면 `git log --oneline -<커밋 수>`로 결과를 보여줍니다

## 출력 형식

먼저 간략히 설명:
- 감지된 컨벤션 패턴
- 변경사항 요약 (나눌 필요가 있으면 그 이유)

그 다음 커밋 계획과 메시지를 제안하고 사용자 확인 후 실행.

Staged 변경사항이 없으면 사용자에게 알리고 먼저 `git add` 사용을 제안.
