Skip to content

Upstream Downstream & fork

YUNHO edited this page Jan 1, 2023 · 1 revision

Upstream / Downstream & fork

upstream과 downstream은 상대적인 개념입니다.

origin과 local을 기준으로 생각하면 origin이 upstream, local이 downstream이 됩니다. push와 pull을 기준으로 생각했을 때 origin으로부터 local로 흐르는 관계가 형성되기 때문입니다. (ex: local에서 origin으로 push한다. origin에서 local로 pull한다.)

예를 들어, git push -u origin main 명령어에서 u는 -set-upstream 옵션의 줄임으로 upstream으로 설정한다는 뜻입니다.

Fork와 Upstream는 어떤 관계도 비슷합니다.

결론부터 말하자면, original repository이 upstream되고, copy repository(내가 forked한 repository)이 origin이 됩니다. local과 origin의 관계에선 local이 downstream, origin이 upstream이었는데, fork한 repository를 기준으로 보면 origin이 downstream, 원본 remote가 upstream이라는 관계가 됩니다. 그래서 GitHub로 협업을 할 때는 보통 다음과 같은 프로세스 거처야 합니다.

1. '원본 remote repository'(upstream)를 깃허브에서 fork
2. 'fork한 remote repository'(origin)를 깃 클라이언트로 clone
3. 기능을 완성할 때까지 반복
  - 'clone한 repository'(local)에 commit
  - local에서 origin으로 push
4. upstream에 반영하기 (PR: Pull Request)
  - PR을 등록하기 전 upstream에 바뀐 내용이 없는 경우
    - origin에서 upstream으로 PR
  - PR을 등록하기 전 upstream에 바뀐 내용이 있는 경우
    - upstream을 local로 pull
    - local에서 origin으로 push
    - origin에서 upstream으로 PR

upstream repository 추가

git remote add {브랜치명} {repository_url} // 브래치명 생략시 main으로 되는 듯?

upstream repository 변경 내역 확인

git fetch upstream {브랜치명} // 브래치명 생략시 main으로 되는 듯?

upstream repository 변경 내역 반영

# local의 main으로 chekout 후 merge
git checkout main
git merge upstream/main

# 아니면 rebase 사용

🔍 참고자료

Clone this wiki locally