초미립자 팁 1 - git upstream

git 명령어 중에 upstream 이라는 기능은 없다. 정확하게는 새로운 repo의 remote에 기존 repo를 참조해서 추가하는 기능이다. 보통 다른 repo에서 또 다른 repo로 이동할 때 history 등을 유지하고 싶을 때 유용하게 사용할 수 있는 방법이다. 순서는 아래와 같이 진행하면 된다. 원래 있던 저장소를 repo1, 옮겨올 저장소를 repo2라고 하고 작업은 repo2에서 진행한다.

$ git remote add upstream https://github.com/repo1.git
$ git fetch upstream
$ git push origin main

보통 이렇게 하면 repo2에 기존 repo1의 모든 branch를 가져 오게 된다. (작업이 끝나면 repo2의 upstream은 지워도 된다.)

그런데, 오늘 작업하다가 repo1의 main(예전에는 master) 브랜치만 fetch 되는 현상이 발생했다. 확인을 해 보면 main branch만 tracked가 되고 있었고, tracked된 브랜치만 git fetch upstream할 때 fetch가 된다. 그래서 fetch할 브랜치를 tracked되도록한 후에 다시 git fetch upstream하면 된다. 작업 영역을 repo2에서 repo1으로 이동한다. tracked되도록 하는 방법은 다양한데, 글쓴이는 아래와 같이 했다.

$ git checkout -t orgin/my_branch
$ git pull
$ git push
$ git remote show origin

my_branch의 상태가 tracked로 변경된 것을 확인했으면 다시 repo2로 작업영역을 옮겨서 git fetch 하면 my_branch 역시 repo2에 옮겨 오는 것을 확인할 수 있다.

이후에 repo2에 branch를 repo1으로 옮기는 것은 다음과 같이 진행하면 된다. (역시 작업 영역은 repo2 이다.)

$ git fetch upstream
$ git checkout -b my_branch upstream/my_branch
$ git push -u origin my_branch

완료!