본문 바로가기
개발 관련/Git

[Git] fork한 repository 동기화부터 pull request (PR)를 보내기까지

by domo7304 2021. 8. 2.

1. fork해 온 repository와 동기화 할 remote repositoty 설정

1. Git bash 열기

2. 현재 설정되어있는 remote repository 확인하기

$ git remote -v
> origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
> origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

별도의 설정을 하지 않았다면 다음과 같이 본인의 repository만이 보일 것이다.

3. fork 한 나의 repository와 동기화할 새로운 remote repository를 'upstream'이라는 이름으로 등록 (브라우저 주소창의 url이 아니라 clone할 때 사용하는 git url을 넣어주면 된다.)

$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git

위의 'upstream'이라는 이름은 어떤 것으로 정해도 상관 없으나 관례상 upstream으로 쓴다.

(2022.01.11. 추가) 깃허브 docs를 보며 공부할 때 관례상 upstream이라 되어있어 그대로 사용했는데, 프로젝트를 진행하다보니 대부분 'origin' 으로 하게 된다...

4. upstream repository가 잘 등록되었는지 확인한다.

$ git remote -v
> origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
> origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
> upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
> upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

 

2. upstream 과 fork 동기화하기

1. 현재 작업 중인 branch를 나의 local project 로 바꾸기

2. upstream repository로부터 각각의 commit들을 fetch하기

$ git fetch upstream
> remote: Counting objects: 75, done.
> remote: Compressing objects: 100% (53/53), done.
> remote: Total 62 (delta 27), reused 44 (delta 9)
> Unpacking objects: 100% (62/62), done.
> From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
>  * [new branch]      main     -> upstream/main

3. fetch를 진행할 나의 branch로 이동, 아래 예시에 'main' 부분에 본인이 fetch를 진행할 branch 이름을 적어주면 됨

$ git checkout main
> Switched to branch 'main'

4. upstream branch와 나의 branch를 merge, 아래 예시는 upstream/main branch의 changes를 현재 내가 있는 branch와 merge하는 과정

$ git merge upstream/main
> Updating a422352..5fdff0f
> Fast-forward
>  README                    |    9 -------
>  README.md                 |    7 ++++++
>  2 files changed, 7 insertions(+), 9 deletions(-)
>  delete mode 100644 README
>  create mode 100644 README.md

이 작업은 현재 나의 branch에 upstream의 change만을 가져와 sync해주는 것이므로, 뭔가 잘못되어 내가 작업한 내용이 손실될 걱정은 할 필요 없다.

5. 병합한 내용을 나의 repository에도 push해주기, 작업 내용이 있었을 경우 해당 내용까지 add, commit 후 push해주기

$ git push origin main

4번까지 병합을 진행한 것은 내 로컬에서만 이루어진 것이므로, 이러한 변경사항을 다시 나의 fork repository에도 push해주어야한다.

6. 내 reposotory에 변경 내용이 잘 반영되었고 해당 내용을 upstream에 반영하고 싶다면, 아래 과정과 같이 github 페이지에 가서 pull request(PR)를 진행한다.

우측 녹색 'New pull request' 버튼 클릭

새로운 변경사항이 생기고 나면 Pull request 탭에 들어가지 않아도 'Code' 탭에 'Compare & pull request' 라는 녹색버튼이 생기긴 한다. 해당 버튼을 눌러 동일하게 진행하면 된다.

어느 branch에서 어느 branch로 PR을 보낼지 선택

위 사진의 경우 이미 PR을 보내고 끝낸 상태여서 'Can't automatically merge' 라는 경고가 뜨지만, 충돌 없이 merge가 가능할 경우 녹색 글씨로 'Able to merge'라는 문구가 나온다. 충돌이 발생할 수 있다면 해당 충돌을 해결하고, 문제가 없다면 'Create pull request' 를 눌러 다음에 나오는 페이지에 적절한 메시지를 남긴 후 PR을 보낸다. 

PR을 보낼 때 필요하다면 Reviewers, Assigners, 진행상황을 보여주기 위한 Labels 등 다른 내용들을 함께 보낼 수도 있다.

PR을 보내게 되면, 내가 작성했던 메시지, commit 내역, 파일의 변경사항들과 함께 위와 같은 화면으로 보여지게 된다. 이 때 repository의 권한이 있는 사용자가 검토 후 merge pull request 를 누르게 되면 내가 보낸 PR이 최종적으로 upstream에 반영되는 것이다.

pull request가 반영된 모습

일반적인 경우 내가 구현하던 기능을 전부 완료한 후 upstream으로 PR을 보내게 되겠지만, 팀원들과 토이 프로젝트를 진행 중 서로 미숙한 부분이 많아서 서로의 코드가 어떻게 작성되고 있는지 PR을 자주 날렸었다.

참고 https://docs.github.com/en/github/collaborating-with-pull-requests/working-with-forks/configuring-a-remote-for-a-fork

댓글