Files
claude-instructions/commands/git/merge.md

316 lines
6.7 KiB
Markdown

---
description: '브랜치를 안전하게 병합하고 충돌을 해결합니다'
allowed-tools:
[
'Bash(git merge:*)',
'Bash(git status:*)',
'Bash(git diff:*)',
'Bash(git log:*)',
'Bash(git branch:*)',
'Bash(git fetch:*)',
'Bash(git pull:*)',
'Bash(git reset:*)',
'Bash(git checkout:*)',
'Bash(git stash:*)',
]
---
# Claude 명령어: Merge
브랜치를 안전하게 병합하고 충돌을 자동으로 해결하는 Git 병합 전문 도구입니다.
## 사용법
```
/git:merge [브랜치명] # 지정된 브랜치를 현재 브랜치에 병합
/git:merge # 대화형 병합 메뉴
```
## 주요 기능
### 1. 안전한 병합 프로세스
- 병합 전 상태 점검 (uncommitted changes, conflicts)
- 자동 백업 및 복구 지점 생성
- 병합 충돌 자동 감지 및 단계별 해결 가이드
### 2. 다양한 병합 전략
- **Fast-forward**: 선형 히스토리 유지
- **No-fast-forward**: 병합 커밋 생성하여 브랜치 히스토리 보존
- **Squash**: 여러 커밋을 하나로 압축하여 병합
### 3. 지능적 충돌 해결
- 충돌 파일 자동 식별
- 충돌 내용 시각적 표시
- 단계별 해결 가이드 제공
- 해결 후 자동 검증
## 프로세스
### 병합 전 검사 단계
1. **현재 브랜치 상태 확인**
- Uncommitted 변경사항 확인
- Working directory 정리 상태 점검
2. **대상 브랜치 검증**
- 브랜치 존재 여부 확인
- 원격 브랜치 동기화 상태 점검
- 브랜치 간 분기점 분석
3. **병합 가능성 사전 점검**
- Potential conflicts 미리 감지
- 병합 후 예상 결과 미리보기
### 병합 실행 단계
1. **자동 백업 생성**
- 현재 상태를 stash로 백업
- 병합 전 커밋 SHA 기록
2. **병합 전략 선택**
- Fast-forward 가능 여부 확인
- 프로젝트 정책에 따른 전략 결정
3. **병합 수행**
- 선택된 전략으로 병합 실행
- 실시간 진행 상황 모니터링
### 충돌 해결 단계
1. **충돌 파일 식별**
- 충돌이 발생한 모든 파일 나열
- 충돌 유형별 분류 (content, delete/modify 등)
2. **대화형 해결 프로세스**
- 파일별 충돌 내용 표시
- 해결 옵션 제시 (ours/theirs/manual)
- 실시간 해결 상태 추적
3. **해결 검증**
- 모든 충돌 해결 확인
- 문법 오류 및 빌드 테스트
- 최종 커밋 생성
## 병합 전략
### Fast-Forward 병합
```
Before: A---B---C (main)
\
D---E (feature)
After: A---B---C---D---E (main)
```
- 선형 히스토리 유지
- 브랜치 흔적 없음
- 간단한 변경사항에 적합
### No-Fast-Forward 병합
```
Before: A---B---C (main)
\
D---E (feature)
After: A---B---C-------F (main)
\ /
D---E----
```
- 병합 커밋으로 브랜치 히스토리 보존
- 기능 단위 추적 가능
- 협업 프로젝트에 권장
### Squash 병합
```
Before: A---B---C (main)
\
D---E---F (feature)
After: A---B---C---G (main)
(D+E+F를 압축한 단일 커밋)
```
- 여러 커밋을 하나로 통합
- 깔끔한 히스토리 유지
- 실험적 커밋 정리에 유용
## 대화형 메뉴
```
🔀 Git Merge 메뉴
1. 📥 브랜치 병합 (Fast-forward)
2. 🔗 브랜치 병합 (No-fast-forward)
3. 📦 브랜치 병합 (Squash)
4. 🔍 병합 가능성 사전 확인
5. ⚡ 진행 중인 병합 완료
6. ❌ 병합 중단 및 되돌리기
7. 📊 병합 히스토리 확인
```
## 충돌 해결 가이드
### 충돌 유형별 해결법
#### 1. 내용 충돌 (Content Conflict)
```
병합할 브랜치의 내용
```
**해결 옵션:**
- `ours`: 현재 브랜치 내용 유지
- `theirs`: 병합할 브랜치 내용 채택
- `manual`: 수동으로 편집
#### 2. 파일 삭제/수정 충돌
```
deleted by us: src/component.js
modified by them: src/component.js
```
**해결 옵션:**
- 파일 삭제 유지
- 수정된 내용 채택
- 새로운 버전으로 재작성
#### 3. 이름 변경 충돌
```
renamed: src/old-name.js -> src/new-name1.js
renamed: src/old-name.js -> src/new-name2.js
```
**해결 과정:**
1. 적절한 파일명 결정
2. 불필요한 복사본 제거
3. 코드 참조 업데이트
### 충돌 해결 도구
#### 자동 해결 도구
- **semantic merge**: 의미론적 분석으로 자동 병합
- **whitespace normalization**: 공백 차이 자동 정규화
- **import sorting**: import 문 자동 정렬
#### 수동 해결 지원
- 충돌 구간 하이라이팅
- 원본 파일 내용 비교
- 단계별 해결 체크리스트
## 병합 후 정리
### 자동 정리 작업
1. **브랜치 정리**
- 병합된 브랜치 삭제 옵션
- 원격 브랜치 정리
2. **히스토리 정리**
- 불필요한 stash 정리
- 임시 파일 제거
3. **상태 확인**
- 병합 결과 검증
- 빌드 상태 확인
## 안전 기능
### 병합 취소 및 복구
```
/git:merge --abort # 진행 중인 병합 중단
/git:merge --reset # 병합 전 상태로 복구
```
### 백업 및 복구점
- 병합 전 자동 stash 생성
- 커밋 SHA 기반 복구점
- 브랜치 상태 스냅샷
### 안전 검사
- 중요 브랜치 보호 (main, develop)
- 병합 권한 확인
- 코드 리뷰 상태 점검
## 고급 기능
### 부분 병합
```
/git:merge --pick [커밋SHA] # 특정 커밋만 선택적 병합
/git:merge --range [시작]..[끝] # 커밋 범위 지정 병합
```
### 병합 전략 옵션
```
-X ours # 충돌 시 현재 브랜치 우선
-X theirs # 충돌 시 병합할 브랜치 우선
-X patience # 더 정확한 충돌 감지
-X ignore-space-change # 공백 변경 무시
```
### GitHub/PR 통합
- PR 상태 기반 병합 제어
- 리뷰 승인 상태 확인
- CI/CD 파이프라인 연동
## 사용 예시
### 기본 병합
```
/git:merge feature/user-auth
```
### 병합 전략 지정
```
/git:merge --no-ff feature/user-auth # No-fast-forward
/git:merge --squash feature/user-auth # Squash merge
```
### 충돌 해결 모드
```
/git:merge --resolve # 진행 중인 충돌 해결 계속
```
## 문제 해결
### 자주 발생하는 문제
1. **병합 충돌이 복잡할 때**
- 단계별 해결 가이드 제공
- 파일별 개별 해결
- 전문가 모드 지원
2. **병합 후 빌드 실패**
- 자동 빌드 테스트
- 실패 시 롤백 옵션
- 수정 후 재시도
3. **히스토리가 복잡할 때**
- 병합 시각화 도구
- 브랜치 관계 다이어그램
- 커밋 히스토리 분석
이 커맨드는 Git 병합의 모든 복잡성을 처리하면서도 안전하고 직관적인 인터페이스를 제공합니다.