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 변경시)
![로그인 폼](screenshot.png)

자주 하는 실수

PR이 너무 큼

문제: 수백 줄 변경, 리뷰하기 어려움

해결:

  • 작은 단위로 PR 분리
  • 한 PR = 한 기능/버그 수정

충돌 해결 안 함

문제: 충돌이 있어서 병합 불가

해결:

git fetch origin
git merge origin/main
# 충돌 해결
git push

충돌 해결하기 참고

관련 명령어

더 알아보기