본문 바로가기

개발👩‍💻/git

git: tracking branch & upstream branch

728x90

tracking branch & upstream branch

tracking branch는 remote branch를 추적하는 local branch이다.

(local branch와 remote branch의 history는 서로 독립적이다)

 

예를 들어 

$ git fetch origin

fetch 명령어를 사용해서 remote branch들을 최신 상태로 update를 한다면,

remote branch들은 <remote name>/<branch name> 형태로 Local에 업데이트 되는데,

이런 형태의 branch들은 직접 수정할 수 없다.

이 remote branch들을 local에서 사용, 수정할 수 있도록 해주는 것이

 

tracking branch이다.

 

tracking branch는 Local에서 원격 브랜치를 tracking할 수 있는 branch이다.

그리고 upstream branch는 tracking branch가 로컬에서 tracking하는 브랜치이다. (origin에 있는 브랜치)

 

  • upstream branch: 원격 브랜치 (tracking branch가 tracking하는 브랜치)
  • tracking branch: 로컬 브랜치로, 원격 브랜치를 tracking한다.

 

case 1: tracking branch를 만들려면 (같은 이름)

$ git switch --track <remote name>/<branch name>

# 예를들어 origin/dev branch가 있다면
# origin/dev 를 tracking하는 로컬 브랜치를 만들겠다는 의미

 

이렇게 switch --track을 이용해서 로컬 브랜치를 만들면, 

remote branch의 이름과 같은 local branch를 만들게 된다.

 

예를 들어, 위에 말한 것처럼 fetch를 해서 원격 브랜치을 가져왔는데,

(pull = fetch + merge)

(fetch는 remote repository의 최신상태를 가져온다.)

해당 브랜치가 로컬에는 없다면, 이 원격 브랜치를 tracking할 로컬 브랜치를 만들어야 한다.

 

(반대로 로컬에서 브랜치를 먼저 만들고 push 했다면 원격 브랜치가 로컬 브랜치 이름을 따서 만들어진다.)

 

case 2 : 만약에 같은 이름의 브랜치가 아니라 로컬 브랜치의 이름을 다른 걸로 지어주고 싶다면

$ git switch -c <tracking branch name> <remote name>/<upstream branch name>
# switch -c 는 브랜치 만들고 해당 브랜치로 이동한다.

 

case 3 : 만약 로컬에 따로 존재하는 브랜치가, 원격 브랜치를 추적하게 하려면

$ git switch --set-upstream-to <upstream branch>

$ git swich -u <upstream branch>

# 두 명령어는 같은 의미다.

 

반응형