# Git Split Pr

> 세션에서 변경된 파일들을 업무 단위별로 자동 분류하고, 각 단위마다 브랜치 생성 → 한글 커밋 메시지로 커밋 → 푸시 → main 브랜치 대상 PR 생성 → PR 리뷰 모니터링까지 완전한 Git 워크플로우를 자동화하는 스킬. 다음 상황에서 반드시 사용: "diff 확인하고 PR 나눠줘", "변경사항 브랜치로 분리", "한글 커밋으로 PR 올려줘", "세션 변경사항 PR 등록", "업무 단위별 브랜치 만들어", "커밋하고 PR 올려", "PR 리뷰 모니터링", "작업 단위로 나눠서 커밋". 사용자가 "PR", "브랜치", "커밋", "diff", "push" 중 하나라도 언급하며 작업 분리나 자동화를 원하면 이 스킬을 사용할 것.

- Skill: `ureca-corp/git-split-pr` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ureca-corp/git-split-pr`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ureca-corp/git-split-pr/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ureca-corp (https://skillmd.com/u/ureca-corp)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/ureca-corp/git-split-pr

---


# Git 업무 단위 분리 & PR 워크플로우

세션에서 발생한 모든 변경사항을 논리적 업무 단위로 나누고, 각 단위를 독립 브랜치로 커밋-푸시-PR까지 자동 처리하는 워크플로우.

---

## 단계 1: 변경사항 전체 파악

```bash
git status
git diff --stat HEAD
git diff HEAD
```

- 미추적(untracked), 수정(modified), 스테이징된 파일 모두 확인
- 삭제된 파일도 포함하여 전체 변경 범위를 파악
- 현재 브랜치와 원격 브랜치 상태도 확인: `git branch -vv`

---

## 단계 2: 업무 단위 분류

변경된 파일들을 **논리적 작업 단위**로 그룹화한다. 파일 경로, 수정 내용, 관련성을 기준으로 판단:

**분류 기준 (우선순위 순):**
1. **기능 단위** — 같은 기능/도메인에 속하는 파일들 (예: auth 관련 파일들)
2. **변경 유형** — feat(기능 추가), fix(버그 수정), refactor(리팩토링), docs(문서), chore(설정)
3. **독립성** — 서로 영향 없이 배포 가능한 단위

**분류 후 사용자에게 반드시 확인:**
```
발견된 업무 단위:
1. [유형] 설명 — 파일 목록
2. [유형] 설명 — 파일 목록
...

이 분류로 진행할까요? 수정이 필요하면 말씀해주세요.
```

사용자 확인 없이 다음 단계로 진행하지 말 것.

---

## 단계 3: 현재 브랜치 및 기반 브랜치 확인

```bash
git remote show origin | grep "HEAD branch"
git branch -r | grep -E "main|master"
```

기반 브랜치 결정 (보통 `main` 또는 `master`). 각 작업 단위 브랜치는 이 기반 브랜치에서 분기한다.

현재 브랜치에 미커밋 변경사항이 있으므로, 임시로 stash하거나 작업 순서를 조율:
```bash
git stash  # 필요 시
```

---

## 단계 4: 각 업무 단위 처리 (순서대로 반복)

각 업무 단위에 대해 아래 절차를 완전히 수행한 후 다음 단위로 넘어간다.

### 4-1. 브랜치 생성

기반 브랜치에서 새 브랜치 생성:
```bash
git checkout <기반브랜치>
git pull origin <기반브랜치>
git checkout -b <브랜치명>
```

**브랜치 명명 규칙:**
- 형식: `<유형>/<짧은-설명-영문>` 
- 예: `feat/user-authentication`, `fix/login-redirect-bug`, `refactor/api-client`
- 소문자, 하이픈 사용, 30자 이내

### 4-2. 해당 파일만 스테이징

해당 업무 단위에 속하는 파일만 정확히 추가:
```bash
git add <파일1> <파일2> ...
# 신규 파일도 포함
# 삭제된 파일은 git rm 또는 git add -u
```

스테이징 상태 확인: `git status`

### 4-3. 한글 커밋 메시지 생성

**커밋 메시지 구조:**

```
<유형>: <한글 TLDR — 이 커밋으로 무엇이 달라지는지 한 줄로>

- <변경 내용 1>
- <변경 내용 2>
- <변경 내용 3>
```

**제목 규칙 (첫 줄):**
- 반드시 한 줄로 끝낼 것 — 줄바꿈 없이 TLDR 요약
- "무엇을 했다"가 아니라 "무엇이 가능해졌다/해결됐다" 관점으로 작성
- 50자 이내 권장

**본문 규칙 (리스트):**
- 기술 용어 대신 기능·사용자 관점 용어 사용
  - ❌ `AuthService 리팩토링`, `JWT 미들웨어 추가`
  - ✅ `로그인 유지 방식 개선`, `자동 로그아웃 기능 추가`
- 변경사항이 많지 않으면 3개 내외, 최대 5개를 넘지 않을 것
- 비개발자가 읽어도 "아, 이게 바뀌었구나" 알 수 있을 정도의 간결함

**유형 분류:**
| 유형 | 의미 |
|------|------|
| `feat` | 새 기능 추가 |
| `fix` | 버그 수정 |
| `refactor` | 내부 구조 개선 (기능 변화 없음) |
| `docs` | 문서 수정 |
| `test` | 테스트 추가/수정 |
| `chore` | 빌드, 설정, 패키지 등 |
| `style` | 화면 스타일, 포맷 변경 |
| `perf` | 속도·성능 개선 |

**예시:**

```
feat: 소셜 계정으로 로그인할 수 있는 기능 추가

- 구글, 카카오 계정으로 로그인 가능
- 기존 이메일 계정과 소셜 계정 연동 지원
- 로그인 화면에 소셜 로그인 버튼 추가
```

```
fix: 로그인 후 이전 페이지로 돌아가지 않던 문제 수정

- 로그인 완료 시 원래 보던 페이지로 자동 이동
- 세션 만료 후 재로그인해도 동일하게 동작
```

```
chore: 배포 환경 설정 파일 정리

- 개발/운영 환경 설정 분리
- 불필요한 테스트용 값 제거
```

커밋 실행:
```bash
git commit -m "$(cat <<'EOF'
<유형>: <한글 TLDR>

- <변경 내용 1>
- <변경 내용 2>
- <변경 내용 3>
EOF
)"
```

### 4-4. 푸시

```bash
git push -u origin <브랜치명>
```

### 4-5. PR 생성

```bash
gh pr create \
  --title "<유형>: <한글 제목>" \
  --base <기반브랜치> \
  --body "$(cat <<'EOF'
## 변경 요약
<!-- 이 PR에서 무엇을 변경했는지 -->

## 변경 이유
<!-- 왜 이 변경이 필요했는지 -->

## 주요 변경 파일
<!-- 변경된 주요 파일 목록 -->

## 테스트 방법
<!-- 변경사항을 확인하는 방법 -->
EOF
)"
```

PR URL을 기록해두고 사용자에게 표시한다.

---

## 단계 5: 전체 PR 목록 요약

모든 업무 단위 처리 후:
```bash
gh pr list --author "@me" --state open
```

생성된 PR 목록을 표 형태로 정리하여 사용자에게 제공:
```
생성된 PR 목록:
| # | 브랜치 | 제목 | URL |
|---|--------|------|-----|
| 1 | feat/... | feat: ... | https://... |
| 2 | fix/... | fix: ... | https://... |
```

---

## 단계 6: PR 리뷰 모니터링 (리뷰 항목이 있는 경우)

PR에 리뷰어가 지정되어 있거나 리뷰 요청이 있는 경우에만 수행.

### 리뷰 상태 확인
```bash
gh pr list --author "@me" --state open --json number,title,reviewDecision,reviews
```

리뷰가 없거나 모두 승인(APPROVED)이면 모니터링 불필요. 리뷰 대기/변경 요청 상태면 `/loop` 스킬을 사용하여 모니터링.

### 모니터링 루프 설정

`/loop` 스킬을 사용하여 1분마다 PR 상태 확인:

각 PR에 대해 아래 명령으로 상태 추적:
```bash
gh pr checks <PR번호> && gh pr view <PR번호> --json reviewDecision,reviews,statusCheckRollup
```

**모니터링 종료 조건:**
- 모든 PR이 `APPROVED` 상태
- CI/CD 체크가 모두 통과 (`✓`)
- 머지가 완료된 경우

**이상 감지 시:**
- 리뷰에서 `CHANGES_REQUESTED` — 요청된 변경사항 목록을 사용자에게 전달
- CI 체크 실패 — 실패한 체크와 오류 내용을 요약하여 보고
- 모든 PR 상태가 이상 없음을 최종 확인한 후 완료 보고

### 최종 확인 보고 형식

```
PR 모니터링 완료

| PR | 제목 | 리뷰 | CI | 상태 |
|----|------|------|----|------|
| #1 | feat: ... | 승인됨 | 통과 | 이상 없음 |
| #2 | fix: ... | 승인됨 | 통과 | 이상 없음 |

모든 PR 이상 없음 확인 완료.
```

---

## 주의사항

- **stash 관리**: 작업 시작 전 stash한 경우, 모든 단위 처리 후 `git stash pop`으로 복원
- **충돌 방지**: 각 브랜치는 기반 브랜치(main)에서 분기하므로 서로 충돌 없음
- **파일 누락 방지**: 각 단위의 파일 목록을 스테이징 전후 `git status`로 반드시 확인
- **커밋 전 검증**: `git diff --staged`로 스테이징된 내용이 의도한 것인지 확인
- **원격 브랜치 확인**: push 전 동일 브랜치명이 원격에 없는지 확인

