Posts [GitHub] Git fetch : fork한 저장소를 원래 저장소의 최신 커밋 내역으로 바꾸기
Post
Cancel

[GitHub] Git fetch : fork한 저장소를 원래 저장소의 최신 커밋 내역으로 바꾸기


fork한 저장소를 원래 저장소의 최신 커밋 내역으로 바꾸기(git fetch)

GitHub 저장소 중에서 fork한 저장소의 커밋 내역을, 원래의 저장소에 올라온 최신 커밋으로 바꾸어야 할 경우가 있습니다.

그럴 때는 아래와 같이 간단하게 진행할 수 있습니다.

특히 오픈소스에 기여하는 등의 활동을 위해서는 이 방법을 꼭 알고 있어야 할 것 같습니다.


☝ fork한 자신의 저장소에 원래 저장소를 remote 로 등록하기

1
$ git remote -v
  • 위 명령어를 쳤을 때 다음과 같은 결과가 나올 것입니다. 이는 아직 원격 저장소 설정이 되지 않은 상태입니다.
1
2
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

리모트 저장소(원격 저장소)에 원본 저장소를 설정해야, 원본 저장소에서 최신 수정 내역들을 내 작업에 반영할 수 있고, PR을 날리는 등 다른 사람들과의 협업이 가능할 수 있습니다.

  • 원격 저장소를 등록하기 위해 다음 명령어를 입력합니다. 여기서 https://github.com/ORIGIN_OWNER/ORIGIN_REPO.git 부분에는 원래 저장소의 git 저장소 주소를 입력하면 됩니다.
1
$ git remote add upstream https://github.com/ORIGIN_OWNER/ORIGIN_REPO.git

위 명령어의 의미는 이름을 upstream으로 하는 원격 저장소를 추가한다는 것입니다. 이제 추가한 upstream 이라는 원격 저장소에서 최신 커밋 내역을 가져오면 됩니다.

  • 위 remote 저장소 등록 과정은 최초 1회만 하면 됩니다. 이후부터는 아래 fetch & merge 과정 1)번부터 진행하면 됩니다.

✌ 원격 저장소에서 최신 커밋 내역 가져오기

  • 아래 명령어를 입력하여 저장소가 잘 설정되었는지 먼저 확인합니다.
1
$ git remote -v

이 때 origin 뿐만 아니라 upstream 이라는 이름으로 결과가 나온다면 잘 등록된 것입니다.

1
2
3
4
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
upstream  https://github.com/ORIGIN_OWNER/ORIGIN_REPO.git (fetch)
upstream  https://github.com/ORIGIN_OWNER/ORIGIN_REPO.git (push)

이제 원격 저장소에서 커밋 내역을 가져오겠습니다. 명령어에는 fetch 혹은 pull 이 존재합니다.

  • fetch : 최신 커밋 내역을 가져온다. merge는 하지 않는다.
  • pull : 최신 커밋 내역을 가져오고, 로컬 저장소(내 저장소)에 merge 까지 자동으로 해 준다.

이처럼 단순히 원격 저장소의 바뀐 내역을 확인만 하려면 fetch 명령어를 활용하고, 그 바뀐 내역을 내 로컬 데이터에 병합까지 자동으로 하려면 pull 명령어를 활용하게 됩니다. pull 은 fetch + merge 와 같습니다.

  • 1) git checkout master 를 입력합니다. 로컬 저장소의 master로 브랜치를 변경한 것입니다.
1
$ git checkout master
  • 2) git fetch upstream을 입력합니다.
1
2
3
4
5
6
7
8
$ git fetch upstream
remote: Enumerating objects: 45, done.
remote: Counting objects: 100% (45/45), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 25 (delta 19), reused 18 (delta 15), pack-reused 0
Unpacking objects: 100% (25/25), done.
From https://github.com/ORIGIN_OWNER/ORIGIN_REPO.git
   5d3b4e6..4f55495  master     -> upstream/master

upstream 이라는 이름의 저장소에서 master 브랜치를 가져왔고, 이로써 최신 커밋 내역이 가져와졌습니다.

이 반영사항을 이제 나의 로컬 저장소에도 반영하려면 merge를 해야 합니다.

  • 3) upstream/master 에는 최신 커밋 내역이 반영되어 있습니다. 이것을 현재 내 master 브랜치에 병합하기 위하여 git merge upstream/master 를 입력합니다.
1
$ git merge upstream/master
  • 이 변경 사항을 내 fork 저장소에 최종 반영하려면 git push origin master를 입력하여 푸쉬합니다.

[React] 리액트 Hooks (1) - useState, useEffect

[오픈소스] 2020 오픈소스 컨트리뷰톤 참가를 시작하면서