[Git] 3.4. 브랜치를 합치는 예의바른 방법 : Pull Request

업데이트:

카테고리:

태그: , , , , , , ,

Pull Request

완전무결한 [master] branch에 누군가의 실수로 잘못된 branch가 merge된 경우, [master] branch를 사용중인 다른 협업자들에게 피해를 줄 수 있기 때문에 다른 협업자, collaborator들이 확인할 수 있는 과정을 거쳐야한다. 이를 Pull Request라고 한다.


Pull Request 만들기

고양이와 문어는 각자 [feature/] branch에 개발을 하고, 완료되면 풀 리퀘스트를 보내고 서로가 [승인] 버튼을 눌렀을 때에만 병합을 하기로 했다. 이 규칙은 고양이가 만들 댓글 기능부터 적용하게 되었다.

image

우선 Sourcetree를 이용해서 최신 커밋에서 [feature/comment] branch를 생성하였다. (이때 [master] branch에 checkout되어 있는지를 확인해야 한다.)

image

IntelliJ에서 Git/iTshirt-cat directory에 comment.md 파일을 생성한 뒤, ‘댓글 기능’ 이라는 텍스트를 입력하고 저장한다.

image

Sourcetree에서 comment.md 파일을 stage에 올리고, ‘댓글 기능 추가’ 라는 commit message와 함께 commit & push 한다.

image

github의 [iTshirt] repo를 보면 [feature/comment] branch에 comment.md 파일이 정상적으로 등록되었음을 확인할 수 있다.

image

<> Code 버튼을 누르면 repo의 main 화면으로 이동하는데 위의 노란색 음영으로 표시되어 새로운 branch로 push 되었음을 친절하게 알려준다. 우측 초록색 Compare & pull request 버튼이 Pull Request를 보낼 수 있는 버튼이다. 이를 클릭해보자.

image

가장 먼저 설정해야 하는 것은 base branch와 compare branch이다. 베이스 브랜치는 병합 결과물이 올라갈, 기준이 되는 브랜치이고, 비교 브랜치는 현재 기준 브랜치의 비교대상이 되는 브랜치이다. 이 상황에서 [base: master], [compare: feature/comment]로 설정한다. (노란 음영 배경의 버튼을 클릭했기 때문에 자동으로 이 브랜치가 설정되어 있다.)

내가 추가한 commit이 잘 들어가 있는지, 파일에는 빠진 것은 없는지 잘 검토하고 Create pull request 버튼을 클릭한다.


Pull Request의 각 입력창

image

1. base: master

병합된 커밋이 들어갈 브랜치를 정하는 선택박스

2. compare: feature/comment

병합의 대상이 될, 즉 내가 만들어서 base branch에 반영시키고 싶은 branch

3. Able to merge

base branch와 compare branch가 충돌 없이 병합될 수 있다는 뜻. 만약 충돌이 난다면 빨간색 Conflict 표시가 생긴다.

4. Reviewers

저장소의 Collaborator가 여러 명이라면 특정한 몇 명을 찝어서 검토 요청을 할 수 있다. 보통 같은 팀원이나 해당 기능과 연관된 동료를 선택

5. Assiginees

이 Pull Request를 담당하는 동료를 적는다. 보통 자기 자신.

6. Labels

이 Pull Request에 관한 라벨을 달아준다.

image

pull request를 누르면 위와 같이 pull request된 것을 확인할 수 있다.


Pull Request를 받았을 때

image

기능 1. Accept : 풀 리퀘스트 수락
기능 2. Request change : 수정 요청
기능 3. Merge pull request : 병합

image

이렇게 [Merge pull request] 버튼을 누르면 병합 커밋을 만들 수 있는 입력 창이 나오며 [Confirm merge] 버튼을 눌러 pull request의 merge를 할 수 있다. 위의 사진엔 ‘Pull request successfully merged and closed’ 라는 텍스트와 함께 병합과 함께 풀 리퀘스트가 닫혔음을 확인할 수 있다.


Sourcetree에서 확인

image

소스트리를 보면 원격저장소의 branch인 [origin/master]는 옛날 커밋을 가리키고 있음을 알 수 있다. 이는 그래프를 업데이트하는 패치(Fetch)가 10분에 한 번씩 자동으로 패치하기 때문이다. Pull은 실제로 코드를 내려받는 반면, 패치는 그래프만 업데이트한다.

image

소스트리에서 상단바의 패치를 눌러 ‘모든 원격 저장소에서 가져오기’ 항목에 체크를 한 뒤 패치를 실시하면, 다음과 같은 그래프를 얻을 수 있다.

image

[origin/master] branch가 새롭게 만들어진 병합 커밋인 ‘Merge pull request #1’을 가리키고 있다. GitHub를 통해서 브랜치의 병합이 잘 된 것을 확인할 수 있다.

image

이제 내 컴퓨터의 local branch인 [master] branch에도 새로운 커밋을 반영해보자. 먼저 [master] branch로 checkokut해준다.

image

이후 상단에 [Pull] 아이콘을 클릭해 [origin/master]의 커밋을 [master]로 가져온다.

image

실행결과는 위와 같다. 내 컴퓨터의 [master] branch가 [origin/master]와 동일하게 ‘Merge pull request #1’ 커밋을 가리키고 있음을 확인할 수 있다.


Reference

  • 팀 개발을 위한 Git GitHub 시작하기, 한빛미디어, 정호영,진유림

댓글남기기