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)를 진행한다.
새로운 변경사항이 생기고 나면 Pull request 탭에 들어가지 않아도 'Code' 탭에 'Compare & pull request' 라는 녹색버튼이 생기긴 한다. 해당 버튼을 눌러 동일하게 진행하면 된다.
위 사진의 경우 이미 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에 반영되는 것이다.
일반적인 경우 내가 구현하던 기능을 전부 완료한 후 upstream으로 PR을 보내게 되겠지만, 팀원들과 토이 프로젝트를 진행 중 서로 미숙한 부분이 많아서 서로의 코드가 어떻게 작성되고 있는지 PR을 자주 날렸었다.
'개발 관련 > Git' 카테고리의 다른 글
[Git] git 실수로 변경한 파일의 변경사항을 되돌리는 방법 (0) | 2022.08.20 |
---|---|
[Git] git submodule을 이용하여 중요한 정보 숨기기 (0) | 2022.01.11 |
[Git] git 명령어 (0) | 2021.08.02 |
댓글