Pull Request란
한 줄 요약
내 변경사항을 다른 브랜치에 병합해달라고 요청하는 것
개요
Pull Request(PR, 풀 리퀘스트)는 **“내 코드를 검토하고 병합해주세요”**라는 요청입니다. GitHub, GitLab(Merge Request), Bitbucket에서 사용하는 협업 방식입니다.
핵심 포인트
- PR은 Git 자체 기능이 아닌 플랫폼 기능 (GitHub 등)
- 코드 리뷰와 토론의 공간
- 병합 전 검증 단계
시각적 이해
┌─ 내 저장소 ──────────────────────────────────────────────┐
│ │
│ main: [c1]──▶[c2]──▶[c3] │
│ │ │
│ feature/login: └──▶[c4]──▶[c5] │
│ │ │
│ Push ▼ │
└──────────────────────────────────────────────────────────┘
│
Pull Request
│
▼
┌─ GitHub ─────────────────────────────────────────────────┐
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Pull Request #42 │ │
│ │ "feat: 로그인 기능 추가" │ │
│ │ │ │
│ │ feature/login → main │ │
│ │ │ │
│ │ [변경사항] [커밋 목록] [코드 리뷰] │ │
│ │ │ │
│ │ [Merge] [Request changes] [Approve] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────┘
왜 PR을 사용하나?
1. 코드 리뷰
- 다른 사람이 코드를 검토
- 버그나 개선점 발견
- 지식 공유
2. 토론
- 구현 방식에 대한 논의
- 댓글로 질문과 답변
- 결정 사항 기록
3. 자동화
- CI/CD 파이프라인 실행
- 테스트 자동 실행
- 코드 스타일 검사
4. 히스토리
- 왜 이 변경이 필요했는지 기록
- 관련 이슈 연결
- 추후 참조 가능
PR 워크플로우
# 1. 브랜치 생성
git switch -c feature/login
# 2. 작업 및 커밋
git add .
git commit -m "feat: 로그인 폼 추가"
git commit -m "feat: 로그인 API 연동"
# 3. 원격에 push
git push -u origin feature/login
# 4. GitHub에서 PR 생성
# → PR 생성하기 참고
# 5. 코드 리뷰
# → 코드 리뷰 참고
# 6. 수정 사항 반영 (필요시)
git add .
git commit -m "fix: 리뷰 반영"
git push
# 7. 병합 (Merge)
# → GitHub에서 Merge 버튼PR 상태
| 상태 | 설명 |
|---|---|
| Open | 검토 중, 아직 병합 안 됨 |
| Merged | 병합 완료 |
| Closed | 병합 없이 닫힘 |
| Draft | 작업 중 (아직 리뷰 준비 안 됨) |
병합 방식
GitHub에서 PR을 병합할 때 세 가지 옵션:
1. Create a merge commit
main: [c1]──▶[c2]──────────────▶[Merge]
│ │
feature: └──▶[c3]──▶[c4]─────┘
- 모든 커밋 히스토리 유지
- Merge commit 생성
2. Squash and merge
main: [c1]──▶[c2]──▶[Squashed]
- 모든 커밋을 하나로 압축
- 깔끔한 히스토리
3. Rebase and merge
main: [c1]──▶[c2]──▶[c3']──▶[c4']
- 커밋을 main 위로 재배치
- 직선형 히스토리
좋은 PR 작성법
제목
feat: 로그인 기능 추가
fix: 이메일 검증 버그 수정
docs: API 문서 업데이트
본문 템플릿
## 변경 사항
- 로그인 폼 UI 구현
- JWT 기반 인증 추가
## 관련 이슈
Closes #42
## 테스트
- [x] 로그인 성공 테스트
- [x] 로그인 실패 테스트
## 스크린샷 (UI 변경시)
자주 하는 실수
PR이 너무 큼
문제: 수백 줄 변경, 리뷰하기 어려움
해결:
- 작은 단위로 PR 분리
- 한 PR = 한 기능/버그 수정
충돌 해결 안 함
문제: 충돌이 있어서 병합 불가
해결:
git fetch origin
git merge origin/main
# 충돌 해결
git push→ 충돌 해결하기 참고
관련 명령어
- git push - PR 생성 전 push
- git branch - 브랜치 관리
- git merge - 로컬 병합