어느 Github 저장소를 Fork하여 나의 repository로 옮긴 후 이 코드를 가지고 몇번의 commit & push 작업을 해왔다. 어느날 메인(Fork했던 대상 Repository) 저장소에서 그 동안 이루어진 수정내역을 나의 repository에 반영해줘야할 시기가 왔다. 이 때 vs code로 진행했던 작업과정을 순서대로 기록해보았다.

용어 정리

  • fork : 다른 사람의 repository를 내가 어떤 부분을 수정하거나 추가 기능을 넣고 싶을 때 해당 repository를 내 github repository로 복제하는 기능

  • origin : 다른 사람의 GitHub의 저장소를 Fork한 경우 내 GitHub의 Repository를 origin이라고 표현한다.

  • upstream : 내가 fork를 시도한 대상이되는 원본 저장소를 upstream이라고 부른다.(따라서 해당 코드에 직접적인 쓰기권한은 없다)

    즉, origin와 upstream 모두 Github에 올라가있는 remote(원격) 저장소

  • local : 내 컴퓨터에 생성된 git repository file

Upstream remote 연결

우선, clone 받아 작업하던 경로에서 git remote -v 명령을 실행하면 다음과 같이 표시된다

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

나는 원본저장소(upstream)의 수정내역을 내 로컬 브랜치에 반영해줘야하기 때문에 upstream을 바라볼수 있도록 다음과 같이 설정해준다.

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

다시 git remote -v 명령을 실행하면 출력내용이 바뀐 것을 볼 수 있다.

$ 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)

upstream repository 최신 정보 가져오기

$ git fetch upstream

이 후부터는 upstream으로부터 commit 내역을 받아올때 발생할 수도 있는 소스 충돌에 대비하기위해 Visual Studio Code로 진행하였고,

extension plugin으로써 “Gitlens”를 설치하였다.

(선택사항) 기존 로컬저장소 작업 브랜치 백업

작업중인 브랜치 우 클릭 > Create Branch > ‘main_backup’ 입력 > enter

이렇게 생성된 브랜치는 만일을 위한 단순 백업 목적 (사용하지 않음)

upstream 저장소 변경내역 반영하기

upstream에서 commit 내역을 가져올 대상 branch 우클릭 > “Merge Branch into Current Branch…” > Merge 진행

소스 충돌 내역 조치하기

Merge를 진행하면 내가 작업했던 내용과 충돌이 발생할 수 있는데 다음과 같이 순서대로 처리하면된다.

좌측 상단 ‘변경 사항 병합’에서 충돌이 발생된 파일 클릭

[병합 편집기에서 확인] 클릭

적절하게 수정하기

충돌이 발생한 코드 위에, 작게 표시되는 이 버튼도 적절하게 사용하면 수월하게 병합을 진행할 수 있다.

그리고 코드 하나가 수정되었다고 바로 **[병합 완료]**를 누르기 전에 우측 상단에 표시되는 화살표를 통해 다른 충돌 내용까지 모두 처리한 후 **[병합 완료]**를 누르자.

[병합 완료]를 눌렀다면 왼쪽에 보이는것 처럼 적절한 commit 메세지를 입력한 후 [커밋]을 누르면, upstream의 최신 변경사항이 내 로컬에 반영된다.

이 후 [동기화] 버튼 클릭하여 push를 진행하면 upstream 수정내역 반영이 완료된다.