로컬 리포지토리에 있는 내용을 원격 리포지토리로 보내려면 push를 해줘야 하고
원격 리포지토리에 있는 내용을 로컬 리포지토리로 가져오려면 pull을 해주면 된다.
하지만, 팀 협업의 경우 원격 리포지토리의 내용과 로컬 리포지토리의 내용이 다른 경우가 많고
무턱대로 중요한 작업을 한 뒤, pull 하고 push하려고 하면 충돌로 인해서 골치 아픈 일이 생길 수 있다.
이를 방지하는 명령어로 fetch가 있다.
fetch는 원격 리포지토리에 있는 내용을 로컬로 가져오되, 변경 기록만 가져올 뿐 수정 내용까지는 덮어쓰지 않는다.
아래 두 프로젝트가 있다고 가정하자.


현재는 두 프로젝트 현황이 다 똑같고, 화면에 표시된 3개의 브랜치들의 내용은 아래와 같다.
이후 팀원이 액터를 추가해서 내용을 원격 리포에 Push 했을 때, 브랜치의 상태는 아래와 같다.

이때, 팀원이 한 프로젝트를 Pull하여 병합하기 전에 패치를 통해 팀원이 어떠한 작업을 하였는지 확인한다.

특별한 이상이 없다면 원격 리포지토리의 내용을 로컬로 반영하는 Pull로 로컬의 위치도 이동시키면 된다.

브랜치는 나만의 작업 공간을 구현하는데 활용되는 요소 중 하나이다.
간단한 작업은 이를 신경쓰지 않는 경우가 많지만, 프로젝트를 하게 되면 관리 측면에서 브랜치 전략이 꼭 필요하다.
유명한 브랜치 전략으로는 Git Flow / Github Flow 등이 있다.
일반적으로, main 브랜치는 가장 안정적이고 최신 릴리즈의 형태의 버전만 유지하기 때문에 테스트를 하고 싶다면 개별 브랜치를 파는 것이 좋다.
브랜치는 로컬/원격 두 가지 유형이 있다.

원격에 브랜치를 생성하고 싶다면 원격 리포지토리 - branch로 가서 추가를 하면 된다.

브랜치를 만들었다면 다음과 같은 화면이 나타난다.

물론 로컬 리포지토리는 이 사실을 모르기 때문에 fetch/pull을 해줘야 한다.

로컬 브랜치를 만드려면 분기하고자 하는 브랜치에서 '브랜치'버튼을 누르고 생성하면 된다.

다음과 같이 로컬 브랜치가 생성된 화면을 볼 수 있다.
