All Articles

git 레포지토리의 모든 리모트 브랜치 가져오기

여러 명이서 개발을 진행하다보면 다른 사람이 진행하고 있던 개발을 내가 이어서 할 수 있는데,
기업협업 4주 동안 다른 분들이 진행하시던 개발을 내가 이어서 진행하게 되었다.

기업협업 동안 프로젝트를 진행하기 위해 내가 맨 처음 프로젝트 구성 및 초기 세팅을 했고, 이를 클론해서 개발을 진행했었다.
현재 내 로컬에는 맨 처음 구성 및 초기 세팅밖에 없었기에 로컬에 있던 것을 지우고 다른 분들이 Git에 올려 놓은 레포지토리를
새로이 클론 받았다.

새롭게 클론 받으면 내 로컬에서 브랜치를 확인하면 기본적으로 마스터 브랜치만 있으며,

git branch -a

명령어로 git remote에 있는 브랜치를 확인할 수 있다.

git remote에 있는 브랜치들을 내 로컬에도 그대로 받아오고 싶었고 구글 검색을 했다.

git fetch --all
git pull --all
git checkout -b LocalName origin/remotebranchname
git fetch origin
git diff origin/branch-name
git merge origin/branch-name
git remote update

등등 여러 명령어들이 검색 결과로 나왔지만 fetch는 브랜치는 가져오지만 내 로컬에는 안생겨서 일일이 checkout을 해야하고,
pull은 충돌 위험이 존재하는 등 시원하게 해결할 수 있는 방법으로 느껴지지 않았다.

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

이 명령어로 했을 때 git remote의 브랜치를 가져오면서 내 로컬에도 remote 브랜치의 이름과 동일하게 브랜치가 생성되면서
로컬 브랜치가 remote 브랜치를 바라보게 만들어준다.
그것도 이 명령어로 remote의 모든 브랜치를!

만약 이 명령어가 아니라면 pull 명령어를 써서 충돌의 위험을 감수하든지, fetch 명령어를 써서 일일이 한 개의 브랜치를 checkout해주든지 다른 방법을 쓰든 했을것이다.