이전 글과 연결되는 내용입니다 >>혼자하는 Git/Github : 전체적인 흐름 알아보기 - 상
예시와 함께 이 글을 읽어보세요 >> 링크
5. 풀리퀘스트 PR(pull request)보내기

원격 저장소의 하위 브랜치에서 원격 저장소의 상위 브랜치로의 merge를 요청하는 것을 풀리퀘스트 PR(pull request)이라고 한다.
풀리퀘스트를 생성하는 방법은 아래와 같다.
- 1.1 로컬 브랜치에서 원격 저장소에 push하고 나면 아래의 이미지와 같이 github에 자동으로 나타나는 PR 생성 창을 누르거나

- 1.2 Pull requests -> new pull request 버튼을 누른다.

- 하위 브랜치와 상위 브랜치가 무엇인지 한 번 더 확인하고 create pull request버튼을 누른다.

- 적절한 PR comment를 남기고 create pull request버튼을 누르면 풀리퀘스트가 만들어진다.

- 현재 원격 저장소를 혼자 사용하고 있다고 가정하고 있으므로 merge를 하기 위해서 아래의 사진과 같은 merge pull request버튼을 누르면 된다. 팀원과 함께 개발하고 있다면 팀원의 승인 이후 merge해야할 것이다. merge는 본인이 해도 되고 팀원이 해도 된다.

6. 원격 저장소의 변경 사항 내려받고 병합하기 : fetch + merge 와 pull

위의 이미지 크게 보기
언제 변경 사항을 받아올까?
원격 저장소에 변경이 있을 때 변경 사항을 받아오게 되는데 나의 경우엔 주로 충돌이 일어날 때 변경사항이 있음을 알게 된다.
언제 충돌이 일어날까
로컬에서 push할 때와 풀리퀘스트 생성시 충돌을 겪을 수 있다. 만약, 혼자 사용하는 원격 저장소인데 충돌이 일어났다면 github에서 직접 파일을 변경한 이력이 있을 것이다.
- 로컬에서 push 할 때의 충돌 확인
아래의 이미지는 원격 저장소의 new브랜치에서 변경사항이 일어나 로컬의 new 브랜치에서 push가 거절되었을 때의 메시지이다. 아래의 메시지를 잘 보면 push가 거절된 힌트를 엄청 친절하게 주고 있다는 것을 알 수 있다. 거절의 이유와 해결법까지 알려주고 있다.

- 풀리 퀘스트에서의 충돌 확인
아래는 원격 저장소의 new브랜치의 내용을 원격 저장소의 main브랜치에 병합하고자 pr을 보냈을때 충돌이 일어났음을 보여주는 사진이다. 풀리퀘스트 생성 전에도 후에도 충돌이 일어났음을 알 수 있다. 
어떻게 충돌을 해결하는가
변경사항이 있는 원격저장소의 branch를 로컬로 다운 받고 병합하여 수정 후 다시 add와 commit, push를 수행하면 된다.
변경사항이 있는 원격저장소의 branch를 가져오는 방법은 두 가지가 있다.
-
fetch
와 merge
- fetch 명령어를 입력하면 FETCH_HEAD 라는 임시 브랜치에 원격저장소의 브랜치의 변경사항이 저장된다. 현재 브랜치에 변경사항을 바로 적용하고 싶지 않을 때 사용하면 된다.
- FETCH_HEAD에 가져온 내용을 현재 브랜치와 병합하기 위해 merge명령어를 수행한다.
git fetch origin 브랜치명
git merge FETCH_HEAD
-
pull
- pull 명령어는 fetch와 merge 명령어를 수행한 것과 같다. merge를 자동으로 하고 싶을 때 사용하면 된다.
git pull origin 브랜치명
- 위의 두가지 방법 중 하나로 병합을 하고 파일을 열면 변경사항이 파일에 표시된다. 로컬저장소에서 작성한 부분과 원격 저장소에서 작성한 부분을 구분하는 부분이 아래와 같이 표시된다. 적절히 변경한 후 저장하면 된다.

- 파일이 변경되었기 때문에 바로 push하는 것이 아니라 add와 commit을 하고 push하면 충돌이 해결된다. PR에서도 아래와 같이 바뀌면 충돌이 해결된 것이다.

- PR에서의 충돌을 해결할 때 짚고 넘어가야 하는 것은 main브랜치의 변경 사항을 받아왔다고 해서 main에 다시 push하는 것이 아니라는 것이다. 원격 저장소의 하위 브랜치에서 main으로 병합을 요청한 상태이니 하위 브랜치로 push해야한다. 풀리 퀘스트를 사용하지 않고 하위 브랜치 따위가 상위 브랜치에 뭔가를 올리려고 하지말자