AgentSkillsCN

commit

创建原子级提交

SKILL.md
--- frontmatter
name: commit
version: 3.1.0
description: 원자적 커밋 생성
user-invocable: true

Commit 스킬

현재 변경사항을 분석하고 논리적 단위로 나누어 원자적 커밋을 생성합니다. 프로젝트 구조를 자동으로 감지하여 적절한 그룹화 규칙을 적용합니다.

실행 단계

1. 프로젝트 타입 감지

디렉토리 구조를 확인하여 프로젝트 타입을 판별합니다:

bash
# 프로젝트 타입 확인
ls *.xcodeproj *.xcworkspace Package.swift 2>/dev/null

프로젝트 타입 결정:

조건타입설명
*.xcodeproj 또는 *.xcworkspace 존재ios-xcodeXcode iOS 프로젝트
Package.swift 존재ios-spmSwift Package Manager 프로젝트
그 외default일반 프로젝트

2. 사전 확인

bash
# 현재 브랜치 확인
git branch --show-current

# 변경사항 확인
git status --short

# 변경 파일 통계
git diff --stat

체크리스트:

  • 변경된 파일이 1개 이상 존재하는가?
  • 현재 브랜치가 무엇인가? (main/develop/feature)

3. 브랜치 확인

IF 현재 브랜치가 main 또는 develop: → 안내 후 종료:

code
main/develop 브랜치에서는 직접 커밋할 수 없습니다.
`/start-branch`를 실행하여 작업 브랜치를 먼저 생성하세요.

ELSE feature 브랜치: → 바로 변경사항 분석 단계로 진행

4. 변경사항 분석 및 그룹화

파일 읽기: 변경된 파일 목록을 기반으로 관련 파일들을 읽어 변경 내용 파악

그룹화 기준 (프로젝트 타입별):

IF 프로젝트 타입 = ios-xcode 또는 ios-spm:

iOS SwiftUI 그룹화 우선순위:

  1. Models (Models/, *Model.swift) - 데이터 모델, DTO
  2. ViewModels (ViewModels/, *ViewModel.swift) - ObservableObject
  3. Views (Views/, *View.swift) - SwiftUI 뷰
  4. Services (Services/, *Service.swift) - 네트워크, 영속성
  5. Extensions (Extensions/, *+Extension.swift) - Swift 확장
  6. Resources (Assets.xcassets, Info.plist, *.strings) - 리소스
  7. Tests (Tests/, *Tests.swift) - XCTest 파일
  8. 설정 파일 (루트 - Package.swift, .swiftlint.yml, *.xcconfig)

ELSE (default):

  • 첫 번째 디렉토리 기준으로 그룹화
  • 루트 파일은 별도 그룹

공통 규칙:

  1. 파일 타입 간 의존성:

    • *View.swift, *ViewModel.swift, *Model.swift는 같은 기능이라면 함께 커밋
  2. 원자성 규칙:

    • 한 커밋당 3-5개 파일 권장 (최대 8개)
    • 변경 파일이 12개 초과이거나 성격이 2개 이상(코드/설정/문서) 섞이면 반드시 분할 커밋
  3. 설정 파일 분리:

    • 설정 파일 변경은 항상 별도 커밋

5. 커밋 메시지 생성

각 그룹마다:

  1. type 결정 (소문자): feat, fix, refactor, chore, docs, build, test
  2. 한글 설명 작성: 무엇을 왜 변경했는지 (50자 이내)

커밋 메시지 형식:

code
type: 한글 설명

6. 순차적 커밋 실행

각 그룹마다 순차적으로:

bash
# 해당 그룹 파일들만 스테이징
git add <파일1> <파일2> <파일3>

# 커밋 (co-author 없이 메시지만)
git commit -m "type: 한글 설명"

# 커밋 성공 확인
git log -1 --oneline

7. 최종 확인 및 요약

bash
# 생성된 커밋 목록 확인
git log --oneline -n <생성된 커밋 수>

# 남은 변경사항 확인
git status

사용자에게 보고:

  1. 생성된 커밋 목록 (커밋 메시지 포함)
  2. 각 커밋에 포함된 파일 목록
  3. 다음 단계 안내

엣지 케이스 처리

Case 1: 변경사항이 없을 때

→ "변경사항이 없습니다." 메시지 출력 후 종료

Case 2: main 또는 develop 브랜치에서 실행

→ "/start-branch를 먼저 실행하세요" 안내 후 종료

Case 3: 변경사항이 너무 많을 때 (50개 이상 파일)

→ 사용자에게 경고 후 자동 그룹화 또는 수동 선택

Case 4: 스테이징된 파일이 이미 있을 때

→ 사용자에게 처리 방법 확인