PR(Pull Request)과 병합(Merge)
이 글의 목차
소요: 30분 · 버전: v0.1 (2026-09-30) · 9장
| 이 장의 질문 | PR은 무엇이고 병합과 어떻게 다른가 |
|---|---|
| 다루는 것 | 브랜치 올리기, PR 만들기, 바뀐 내용 검토, 병합(Create a merge commit), 병합 뒤 main 받기, work를 main 최신으로 맞추기, 같은 브랜치로 두 번째 PR |
| 다루지 않는 것 | 충돌(10장), 여러 사람이 검토하는 절차 |
| 이 장을 마치면 | work에서 한 작업을 PR로 main에 합칠 수 있습니다 |
1. PR은 요청, 병합은 실제로 합치기
| 용어 | 뜻 | main이 바뀌나 |
|---|---|---|
| PR(Pull Request, 풀 리퀘스트) | "work의 변경을 main에 합쳐 주세요"라는 요청서. 바뀐 내용과 의견을 한곳에서 봅니다 | 아니요 |
| 병합(merge) | PR의 변경을 실제로 main에 합치는 것 | 예 |
혼자 쓰는 저장소에서도 PR을 거치면, 합치기 전에 바뀐 내용을 한 화면에서 다시 보게 되고, "언제 무엇을 합쳤는지"가 PR 목록에 남습니다.
PR의 Pull 은 6장의 Pull(받기)과 다른 뜻입니다. "내 변경을 끌어가 달라"는 요청이라는 뜻으로 붙은 이름입니다.
2. 실습 1: work를 올리고 PR 만들기
8장이 끝난 상태(Current Branch 가 work, 위쪽 오른쪽이 Publish branch)에서 시작합니다.
- 위쪽 오른쪽 Publish branch 를 누릅니다.
work가 GitHub에 올라갑니다. - 가운데에 나타난 Preview Pull Request 를 누릅니다. 보이지 않으면 메뉴 Branch → Preview Pull Request 를 누릅니다.
- 창 위쪽이 base: main ← work 인지 확인합니다. "work의 변경을 main에 합친다"는 뜻입니다. 아래에 바뀐 내용이 보입니다.
- Create Pull Request 를 누릅니다. 브라우저에 PR 작성 화면이 열립니다.
3. 실습 2: GitHub에서 PR을 만들고 병합하기
3-1. PR 만들기
- 위쪽이 base: main ← compare: work 인지 확인합니다.
- 제목은 커밋 메모가 자동으로 들어가 있습니다. 설명 칸에 무엇을 왜 바꿨는지 한두 줄 씁니다. 예:
README에 한 줄을 추가했습니다. - Create pull request 를 누릅니다. PR 번호(
#1)가 붙은 화면이 열립니다.
3-2. 검토하기
-
Files changed 탭을 누릅니다. 합쳐질 내용이 diff로 보입니다.
웹에서 추가한 줄 + 작업 브랜치에서 추가한 줄 -
의도한 변경만 있는지 봅니다. 고칠 것이 있으면 병합하지 말고, work에서 고쳐 커밋·푸시합니다. 같은 PR에 자동으로 더해집니다.
3-3. 병합하기
- Conversation 탭으로 돌아와 아래쪽 초록 버튼 옆의 ▾ 를 누르고 Create a merge commit 을 고릅니다.
- Merge pull request → Confirm merge 를 누릅니다.
PR 위의 표시가 보라색 Merged 로 바뀌면 main에 합쳐진 것입니다.
병합 방식은 항상 Create a merge commit 을 씁니다. 다른 방식(Squash and merge, Rebase and merge)은 기록을 다시 쓰기 때문에, work를 계속 쓰는 이 튜토리얼 방식과 맞지 않습니다(5절). 한 번 고르면 GitHub가 다음에도 기억합니다.
4. 실습 3: 병합한 뒤 정리하기
- 병합 뒤 나타나는 Delete branch 는 누르지 않습니다. 이 튜토리얼은
work를 계속 씁니다. - GitHub Desktop에서 Current Branch → main 으로 바꿉니다. 내 PC의 main은 아직 병합 전 상태입니다.
- Fetch origin → Pull origin 을 누릅니다. 병합된 내용이 내 PC의 main에 들어옵니다.
- History 맨 위에
Merge pull request #1 from …/work라는 커밋이 보입니다. 병합이 남긴 기록입니다. - Current Branch → work 로 돌아옵니다.
- 메뉴 Branch → Update from main 을 누릅니다. 방금 받은 main의 내용이 work에도 들어옵니다.
- 위쪽 오른쪽이 Push origin 으로 바뀌면 누릅니다. 바뀌지 않으면 그대로 둡니다.
병합한 뒤 main을 받아 두지 않으면, 내 PC의 main은 계속 옛날 상태로 남습니다. 병합했으면 main을 받고, work에도 반영한다를 한 묶음으로 기억합니다.
work를 main 최신으로 맞추는 이유
혼자 쓰는 저장소에서는 main에 들어오는 것이 전부 내 work에서 간 것이라, 6~7번을 건너뛰어도 문제가 거의 없습니다. 하지만 여러 사람이 같은 저장소를 쓰면 다른 사람의 PR이 main에 계속 들어옵니다. 내 work가 그것을 받지 않으면 점점 옛날 상태가 되고, 나중에 합칠 때 충돌(10장)이 날 가능성이 커집니다.
그래서 작업을 시작하기 전에 아래 순서로 work를 최신으로 맞추는 습관을 들입니다.
Current Branch → main → Fetch origin → Pull origin
→ Current Branch → work → Branch → Update from main → Push origin
Update from main 을 눌렀을 때 충돌 창이 뜨면, 10장의 방법대로 Abort merge 로 빠져나옵니다.
5. 실습 4: 같은 work로 두 번째 PR
- Current Branch 가
work인지 확인합니다. - VS Code에서
회의록-양식.md맨 아래에- 다음 회의:를 추가하고 저장합니다. - 메모
회의록 양식에 다음 회의 칸 추가로 커밋하고, 이번에는 Push origin 을 누릅니다. work는 이미 올라가 있어서 Publish가 아니라 Push입니다. - Preview Pull Request → Create Pull Request → 브라우저에서 Create pull request 를 누릅니다.
- Files changed 에
회의록-양식.md한 줄만 있는지 봅니다. 첫 번째 PR의 내용은 다시 나오지 않습니다. - Create a merge commit 으로 병합하고, 4절의 2~7번처럼 main을 받고 work에 반영합니다.
한눈에 보기
work에서 커밋 → Push origin (처음이면 Publish branch)
→ Preview Pull Request → Create Pull Request
→ 브라우저: Create pull request → Files changed 확인
→ Create a merge commit → Confirm merge (Delete branch는 누르지 않음)
→ Desktop: main으로 바꾸기 → Fetch → Pull → work로 돌아오기
→ Branch → Update from main → Push origin
확인
확인 문제
① PR을 만들었습니다. 이제 main에 반영됐나요?
아닙니다. PR은 요청입니다. Merge pull request → Confirm merge까지 눌러야 main이 바뀝니다.② PR을 만든 뒤 오타를 발견했습니다. PR을 새로 만들어야 하나요?
아닙니다. work에서 고쳐 커밋·푸시하면 같은 PR에 더해집니다.③ 병합하고 나서 내 PC의 main에는 무엇을 해야 하나요?
main으로 바꾸고 Fetch → Pull로 받습니다.자주 발생하는 문제
| 증상 | 확인할 것 |
|---|---|
| Preview Pull Request가 보이지 않습니다 | work를 아직 올리지 않았거나 main이 선택되어 있습니다. Current Branch와 위쪽 오른쪽 버튼을 봅니다 |
| PR 화면 위쪽이 base: work ← compare: main 입니다 | 방향이 반대입니다. base 를 main, compare 를 work로 바꿉니다 |
| Merge pull request 대신 다른 이름의 초록 버튼이 있습니다 | 병합 방식이 다르게 선택되어 있습니다. 옆의 ▾ 를 눌러 Create a merge commit 을 고릅니다 |
| This branch has conflicts that must be resolved 라고 나옵니다 | 충돌입니다. 병합하지 말고 10장을 봅니다 |
| Delete branch를 눌러 버렸습니다 | 바로 옆의 Restore branch 를 누르면 되살아납니다 |