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은 요청, 병합은 실제로 합치기

① PR 만들기(work에서 main으로 합쳐 달라는 요청), ② 검토, ③ 병합의 세 단계. 수정 요청이 오면 work에서 고쳐 다시 푸시하면 같은 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)에서 시작합니다.

GitHub Desktop에서 Publish branch를 누르고, Preview Pull Request를 눌러 base가 main인지 확인한 뒤 Create Pull Request를 누르는 그림
  1. 위쪽 오른쪽 Publish branch 를 누릅니다. work 가 GitHub에 올라갑니다.
  2. 가운데에 나타난 Preview Pull Request 를 누릅니다. 보이지 않으면 메뉴 Branch → Preview Pull Request 를 누릅니다.
  3. 창 위쪽이 base: main ← work 인지 확인합니다. "work의 변경을 main에 합친다"는 뜻입니다. 아래에 바뀐 내용이 보입니다.
  4. Create Pull Request 를 누릅니다. 브라우저에 PR 작성 화면이 열립니다.

3. 실습 2: GitHub에서 PR을 만들고 병합하기

왼쪽은 PR 작성 화면에서 방향을 확인하고 제목과 설명을 써서 Create pull request를 누르는 모습, 오른쪽은 만들어진 PR에서 Files changed 탭을 보고 Merge pull request의 Create a merge commit을 고르는 모습

3-1. PR 만들기

  1. 위쪽이 base: main ← compare: work 인지 확인합니다.
  2. 제목은 커밋 메모가 자동으로 들어가 있습니다. 설명 칸에 무엇을 왜 바꿨는지 한두 줄 씁니다. 예: README에 한 줄을 추가했습니다.
  3. Create pull request 를 누릅니다. PR 번호(#1)가 붙은 화면이 열립니다.

3-2. 검토하기

  1. Files changed 탭을 누릅니다. 합쳐질 내용이 diff로 보입니다.

      웹에서 추가한 줄
    + 작업 브랜치에서 추가한 줄
    
  2. 의도한 변경만 있는지 봅니다. 고칠 것이 있으면 병합하지 말고, work에서 고쳐 커밋·푸시합니다. 같은 PR에 자동으로 더해집니다.

3-3. 병합하기

  1. Conversation 탭으로 돌아와 아래쪽 초록 버튼 옆의 ▾ 를 누르고 Create a merge commit 을 고릅니다.
  2. Merge pull request → Confirm merge 를 누릅니다.

PR 위의 표시가 보라색 Merged 로 바뀌면 main에 합쳐진 것입니다.

병합 방식은 항상 Create a merge commit 을 씁니다. 다른 방식(Squash and merge, Rebase and merge)은 기록을 다시 쓰기 때문에, work를 계속 쓰는 이 튜토리얼 방식과 맞지 않습니다(5절). 한 번 고르면 GitHub가 다음에도 기억합니다.

4. 실습 3: 병합한 뒤 정리하기

병합된 PR에서 Delete branch를 누르지 않고, GitHub Desktop에서 main으로 바꾼 뒤 Fetch와 Pull origin을 누르는 그림
  1. 병합 뒤 나타나는 Delete branch 는 누르지 않습니다. 이 튜토리얼은 work 를 계속 씁니다.
  2. GitHub Desktop에서 Current Branch → main 으로 바꿉니다. 내 PC의 main은 아직 병합 전 상태입니다.
  3. Fetch origin → Pull origin 을 누릅니다. 병합된 내용이 내 PC의 main에 들어옵니다.
  4. History 맨 위에 Merge pull request #1 from …/work 라는 커밋이 보입니다. 병합이 남긴 기록입니다.
  5. Current Branch → work 로 돌아옵니다.
  6. 메뉴 Branch → Update from main 을 누릅니다. 방금 받은 main의 내용이 work에도 들어옵니다.
  7. 위쪽 오른쪽이 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

work에서 첫 번째 작업을 PR 1로 병합하고, 이어서 두 번째 작업을 PR 2로 병합하면 PR 2에는 두 번째 작업만 나타난다는 그림
  1. Current Branch 가 work 인지 확인합니다.
  2. VS Code에서 회의록-양식.md 맨 아래에 - 다음 회의: 를 추가하고 저장합니다.
  3. 메모 회의록 양식에 다음 회의 칸 추가 로 커밋하고, 이번에는 Push origin 을 누릅니다. work는 이미 올라가 있어서 Publish가 아니라 Push입니다.
  4. Preview Pull Request → Create Pull Request → 브라우저에서 Create pull request 를 누릅니다.
  5. Files changed 에 회의록-양식.md 한 줄만 있는지 봅니다. 첫 번째 PR의 내용은 다시 나오지 않습니다.
  6. 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 를 누르면 되살아납니다

다음 장

10장. 충돌(Conflict)

© KYONGHO ENGINEERING & ARCHITECTS