개발
[Git] fork 저장소에서 original 저장소의 변경내용 반영
참치참치짱
2024. 3. 22. 01:18
Git에는 fork기능이 있습니다. 어떠한 레파지토리를 그대로 복사해서 새로운 레파지토리를 만드는 기능입니다. 하지만 복사된 레파지토리는 기존 레파지토리와 연결되어 있습니다. 이 연결을 통해서 기존 레파지토리의 변경 내용을 fork한 저장소에 반영할 수 있는 것입니다.
먼저 fork한 레파지토리에서 아래 명령어를 입력하여봅시다.
git remote -v
이러면 아래와 같이 출력됩니다.
origin https://github.com/<계정이름>/<레파지토리이름>.git (fetch)
origin https://github.com/<계정이름>/<레파지토리이름>.git (push)
현재는 origin이라는 원격저장소만 연결되어있다. 즉, 지금은 fork된 레파지토리만 연결되어있다는 의미이다. 이제 원본 레파지토리를 연결시켜보자.
(참고로 origin은 대표적인 원격저장소 별칭이다.)
origin주소를 추가할 때 처럼 하면 된다.
$ git remote add upstream https://github.com/<원본레파지토리 계정이름>/<레파지토리이름>.git
upstream이라는 별칭으로 연결시켰다. 그 후 다시 git remote -v 명령어를 입력시키면 아래와 같이 출력된다.
origin https://github.com/A/<레파지토리이름>.git (fetch)
origin https://github.com/A/<레파지토리이름>.git (push)
upstream https://github.com/B/<레파지토리이름>.git (fetch)
upstream https://github.com/B/<레파지토리이름>.git (push)
이러면 이제 연결이 되었다.
이제 upstream이라는 별칭을 가지고 있는 기존 레파지토리의 변경내용을 가져와보자.
git fetch upstream
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 13 (delta 5), reused 0 (delta 0), pack-reused 0
오브젝트 묶음 푸는 중: 100% (13/13), 9.41 KiB | 602.00 KiB/s, 완료.
https://github.com/B/<레파지토리이름> URL에서
* [새로운 브랜치] main -> upstream/main
이렇게 출력되었다는 것은, 현재 새로운 브랜치 upstream/main에 기존 레파지토리의 변경내용이 저장되었다는 의미이다.
git checkout upstream/main
이 명령어를 통해 upstream/main 브랜치에 가보면 변경된 것을 볼 수 있다. 그렇다면 우리는 이 변경내용을 merge를 통해 다시 fork레파지토리의 main브랜치로 가지고 와야한다.
git merge upstream/master
그 후 원격저장소로 올리면 된다.
git push