git fetch란?
Git은 Remote Branch를 계속 Tracking 하지 않는다. 사용자가 요청할 때만 트래킹을 한다. 사용자가 이러한 트래킹을 요청하는 명령어가 바로 git fetch 이다.
어떤 때 git fetch를 써야 할까?
master branch에 first commit과 second commit이 있는 상태에서 해당 브랜치를 git clone 했다고 해보자. 그러면 [그림1]과 같이 Remote Repository인 GitHub의 master 브랜치는 second commit을 포인팅 할 것이고, Local의 master 브랜치 또한 second commit을 포인팅 할 것이다. 그리고 해당 브랜치가 트래킹하는 origin/master은 마찬가지로 second commit을 트래킹 할 것이다.
그 후 만약 협업하는 사람이 GitHub에 third commit과 fourth commit을 push 했고, Local 브랜치에는 나에 의해 new commit이 생겨났다고 해보자. 그러면 [그림2]처럼 GitHub의 master branch는 fourth commit을 포인팅 할 것이고, Local의 master은 new commit을 포인팅 할 것이다. 하지만 문제는 Local의 origin/master이다. 이 브랜치는 자동으로 업데이트 되지 않기 때문에 여전히 second commit을 바라보고 있다.
하지만, 위와 같이 하면 우리가 만든 new commit을 push하려고 할 때 어떤 문제가 생길지 알 수 없다. 이때 git fetch를 쓰면 [그림3]과 같이 Local의 origin/master가 Remote의 master branch를 tracking 하도록 업데이트 된다.
이때 origin/master은 내가 작업하고 있는 Local의 master 브랜치까지는 내려오지 않는다.
git fetch를 하는 다양한 방법
git fetch와 git fetch [alias] 사용해 모든 브랜치 최신 remote 커밋 트래킹하기
git fetch나 git fetch origin을 하면 remote 브랜치들이 모두 업데이트 된다. 예를 들어 git fetch origin을 하면 origin에 해당하는 remote git repository에 맞춰 origin/을 접두어로 갖는 브랜치들이 모두 업데이트 된다.
git fetch
git fetch [alias]
git fetch [alias] [branch]를 사용해 개별 브랜치 최신 remote 커밋 트래킹하기
모든 브랜치를 트래킹하도록 하는 git fetch와 달리, git fetch [alias] [branch]는 개별 브랜치를 트래킹 할 수 있게 한다.
git fetch [alias] [branch]
예를 들어 master branch만 트래킹 하고 싶다면 git fetch origin master 과 같이 사용하면 된다.