본문 바로가기
SCM(형상 관리)/VCS | Git(GitHub)

(GitHub) Pull Request 이해하기

by 카랑현석 2024. 11. 23.

학습 목표

1. GitHub branch를 왜 파는지 이해할 수 있다.

2. Pull Request에 대해 이해할 수 있다.



한 줄 요약

Pull Request는 "틀린 그림 찾기" 이다.

branch는 "코드 저장 기능" 이다.

 

Pull Request? 왜 필요하지?

 

여러 명에서 작업할 경우, 각자가 만든 것을 어떻게 합치지?

 

A는 퀴즈 페이지를, B는 챌린지 페이지를 만들었다.

이제 각자 만든 기능을 한 프로젝트에 합치려고 한다.

 

이때 각자 만든 것을 GitHub의 Pull Request를 올려 합친다.

Pull Request를 하면 자동으로 달라진 부분을 찾고 이 것들을 하나로 합쳐준다.

 

같은 페이지를 작업하면 어떻게 될까?

 

아까는 다른 페이지를 작업했다. 그래서 퀴즈 페이지는 QuizPage.vue 에서 작업하고, 챌린지 페이지는 Challenge.vue 에서 작업을 했었다.

 

하지만 이번에는 같은 페이지인 퀴즈 페이지(QuizPage.vue)를 A와 B 모두 작업했다고 하자.

 

아까와 마찬가지로 이때 각자 만든 것을 GitHub의 Pull Request를 올려 합친다.

Pull Request를 하면 자동으로 달라진 부분을 찾고 이 것들을 하나로 합쳐준다.

 

그런데 같은 페이지에서 작업한다면 동일한 부분을 다르게 수정할 수 있다.

예를 들면 아래와 같다.

// 원래 코드
int Quiz = 5;

// A는 이 코드를 아래와 같이 수정
int quiz = 5;

// B는 이 코드를 아래와 같이 수정
int Quiz = 3;

 

이런 경우 GitHub의 Pull Request는 어떤 것을 수정해야 할까?

이런 경우 GitHub는 어떤 것을 반영할지 애매하므로 Conflict (충돌)이 발생하게 된다.

 

그래서 팀 프로젝트를 할 때 각자 다른 페이지(파일)을 작업하는 것이 일반적이다.

 

충돌이 발생하게 되면, int quiz = 5; 나 int Quiz = 3; 중 하나를 선택해서 합치게 된다.

그러면 A와 B가 작업한 코드 중 하나는 버려야 하므로, 코드가 유실될 수 있다.

 

이런 것을 방지하기 위해서 각자의 branch를 파서 작업을 진행한다.

branch는 게임으로 따지면 저장하기 기능을 가지는 것이다.

 

위의 사진으로 예를 들어보자. 아래 코드와 같이 int Quiz = 5; 의 본래 코드를 A와 B가 각각 다르게 바꾸었다.

A와 B가 모두 dev branch로 합친다면 github 입장에서는 어떤 것을 반영해서 합쳐야 할지 애매하기 때문에 conflict(충돌) 오류가 발생하게 된다. 그러면 둘 중 하나를 선택해서 합치게 된다. 

// 원래 코드
int Quiz = 5;

// A는 이 코드를 아래와 같이 수정
int quiz = 5;

// B는 이 코드를 아래와 같이 수정
int Quiz = 3;

 

이 것을 방지하기 위해 A는 A_quiz_branch 이름의 새로운 브랜치를 파서 int quiz = 5; 를 넣어놓고

B는 B_quiz_branch 이름의 새로운 브랜치를 파서 int Quiz = 3; 을 넣어놓는다.

 

이렇게 branch를 파서 먼저 각자의 branch에 저장해두고, 이 것을 dev나 main 브랜치에 합치는 과정을 거치면 된다.

혹여 pull request 과정에서 코드가 유실되더라도 branch에 저장한 것을 다시 가져오면 된다.

 

결론
Pull Request는 틀린 그림 찾기+새로운 그림 합치기 이다.
branch는 혹시 모를 상황에 대비하여 각자의 기능을 저장해두는 임시 저장소이다.

GitHub에서 Pull Request 하는 방법

1. GitHub Repository를 엽니다.

2. Pull requests 버튼을 클릭합니다.

 

3. New pull request 버튼을 클릭합니다.

 

4. base repositoryhead repository를 지정합니다.
지정 후 Create pull request 버튼을 클릭합니다.

 

주의 : branch와 repository를 모두 잘 확인해야 합니다.

아래 이미지를 예로 들면, HwangHyeonseok/chogodzip-front 레포지토리의 main branch에 있는 코드를 Budungs/chogodzip-front 레포지토리의 main branch에 있는 코드에다 합친다는 의미입니다.

5. title, description 작성 후 Create pull request 버튼 클릭

6. 체크 박스 체크 후 Merge pull request 버튼 클릭 > Confirm merge 클릭

7. 정상 반영 확인