배치 커밋
스테이지되지 않은 작업을 논리적 커밋으로 분할합니다. 각 커밋은 단독으로 검토 가능해야 하며, 해당 조각을 이해하는 데 필요한 모든 파일을 포함해야 합니다.
안전 (항상)
- git config를 절대 업데이트하지 않습니다.
- 사용자가 명시적으로 요청하지 않는 한 강제 푸시, 하드 리셋 또는 기타 파괴적인 Git 명령을 사용하지 않습니다.
- 사용자가 명시적으로 요청하지 않는 한 훅을 건너뛰지 않습니다(
--no-verify등). - 시크릿(
.env, 자격 증명, 키)을 절대 스테이징하지 않습니다. 경고하고 제외합니다. - 사용자가 수정 규칙을 완전히 충족하지 않는 한
git commit --amend를 사용하지 않습니다. - 커밋 훅이 실패하면 문제를 해결하고 새 커밋을 생성합니다. 실패한 커밋을 수정하지 않습니다.
- 커밋 메시지에
Co-authored-by: Cursor를 추가하지 않습니다.
1. 검사
가능한 경우 병렬로 실행:
git statusgit diff및git diff --stagedgit log -5 --oneline(메시지 스타일 확인용)git remote -v및 브랜치 추적 (git status -sb)
커밋할 내용이 없으면 중단하고 그렇게 알립니다.
2. 배치 계획
변경 사항을 목적별로 그룹화합니다. 파일 유형만으로 그룹화하지 마십시오. 예시:
- 하나의 기능 또는 사용자 대상 동작 + 해당 테스트 및 문서
- 하나의 버그 수정 + 해당 버그를 수정하는 파일만
- 독립적으로 서는 리팩토링 (관련 없는 기능과 혼합 금지)
- 한 영역에 범위가 지정된 작업 또는 도구 (종속성, CI, 구성)
규칙:
- 관련 없는 기능을 하나의 커밋에 혼합하지 않습니다.
- 동일 배치에 동반 파일을 포함합니다(예: 하나의 변경에 대한 스키마 + 엔티티 + 마이그레이션 + 호출 지점).
- 파일이 두 가지 관심사에 관련된 경우 주요 배치를 선택하거나 커밋 전에 트레이드오프를 언급합니다.
- 배치를 순서대로 나열합니다: 기초(공유 유형, 구성) 먼저, 그 다음 기능, 마지막으로 이전 커밋에 의존하는 문서 전용.
사용자에게 간단한 계획을 보여줍니다: 배치 번호, 파일 또는 경로, 제안된 Conventional Commit 주제. 그런 다음 사용자가 반대하지 않으면 진행합니다.
3. 각 배치 커밋
각 배치에 대해 순차적으로:
- 해당 배치만 스테이징합니다(
git add특정 경로 사용; 전체 트리가 하나의 배치가 아닌 한git add -A는 피합니다). git diff --staged로 관련 없는 내용이 포함되지 않았는지 다시 확인합니다.- 왜 에 초점을 맞춘 Conventional Commit 주제(
feat,fix,chore,docs,refactor,test등)를 작성합니다. - 브랜치 이름에 이슈 ID가 포함된 경우 주제 끝에
#<issue>를 추가합니다(GitLab 스타일). - 커밋합니다. Windows PowerShell에서는
git commit -m 'subject'(또는 짧은 본문을 위해 여러-m)를 사용합니다. bash에서는 HEREDOC를 사용해도 좋습니다. - 의도된 변경 사항에 대해 작업 트리가 깨끗해질 때까지 반복합니다.
4. GitHub(또는 원격)로 푸시
모든 배치 이후:
origin(또는 사용자가 지정한 원격)이 존재하고 브랜치를 게시해야 하는 경우, 업스트림이 없으면git push -u origin HEAD를, 그렇지 않으면git push를 실행합니다.main또는master에 강제 푸시하지 않습니다.- 푸시가 거부되면 오류를 보고하고 풀/리베이스를 제안합니다. 사용자가 명시적으로 요청하지 않는 한 강제 푸시하지 않습니다.
- 원격이 없으면 커밋이 로컬에만 있다고 말하고 원격을 추가할지 묻습니다.
5. 보고
요약:
- 각 커밋 해시와 주제 (최신 순서 또는 번호 목록).
- 푸시 결과 (가능한 경우 URL 또는 브랜치).
- 의도적으로 스테이징되지 않은 항목 (시크릿, 로컬 전용 파일).
commit-msg와의 관계
commit-msg는 이미 스테이징된 파일에서 한 줄을 제안하고 커밋하지는 않습니다. 이 스킬은 계획, 스테이징, 여러 단계의 커밋, 푸시를 수행합니다.