Original article: Git Checkout Remote Branch Tutorial

Git은 프로젝트의 여러 버전을 관리하고 기록할 수 있는 버전 관리 시스템(version control system)입니다. 새로운 업데이트로 인해 앱에서 에러가 발생할 때 Git을 사용하면 앱을 이전 버전으로 되돌릴 수 있습니다.

Git을 통해 버전 관리 외에도 여러 환경에서 동시에 작업할 수 있습니다. 여기서 여러 환경이란 브랜치를 의미합니다.

브랜치의 필요성

Git에서 작업하면 main이라는 메인 브랜치가 있습니다. 이 특정 브랜치에는 앱이 제품으로 출시될 때 배포되는 소스 코드가 저장되어 있습니다.

앱을 업데이트하려는 경우 이 브랜치에 커밋 및 변경 사항을 추가할 수도 있습니다. 사소한 업데이트라면 크게 상관없을 수도 있지만, 규모가 큰 업데이트라면 이야기가 달라집니다. 바로 이때 브랜치 기능이 중요한 역할을 합니다.

터미널을 사용해 프로젝트 디렉터리에서 브랜치를 생성하려면 다음과 같은 명령어를 실행합니다.

# 새 브랜치 생성하기 
git branch 브랜치-이름
# 생성된 브랜치로 전환하기 
git checkout 브랜치-이름 

이제 새 브랜치에서 업데이트 작업을 진행할 수 있습니다. 그런 다음 작업을 마치면 main 브랜치와 병합할 수 있습니다.

브랜치의 또 다른 이점은 여러 개발자가 동일한 프로젝트에서 동시에 작업할 수 있다는 것입니다. 여러 개발자가 동일한 main 브랜치에서 작업한다면 문제점이 많습니다. 특히 각 개발자의 코드 간에 변경 사항이 너무 많아서 병합 충돌(merge conflict)이 자주 발생하게 됩니다.

Git을 사용하면 한 브랜치에서 작업을 진행하는 동안 다른 브랜치(즉, 다른 환경)에서 새 업데이트를 추가할 수 있습니다.

Git 원격 브랜치 체크아웃한다는 의미

Git으로 프로젝트를 시작하면 로컬 컴퓨터에 있는 로컬 main 브랜치와 GitHub와 같은 Git 지원 플랫폼에 있는 원격 main 브랜치라는 두 가지 환경을 줍니다.

로컬 main 브랜치에서 원격 main 브랜치로 변경 사항을 푸시할 수 있고, 원격 브랜치에서 변경 사항을 pull 명령어를 통해 로컬 브랜치로 가져올 수도 있습니다.

로컬 환경에서 브랜치를 생성하면 GitHub로 푸시되여 원격 브랜치가 될 때까지 로컬 환경에만 존재합니다. 다음 예시를 확인해봅시다.

예시:

# 새 브랜치 생성하기 
git branch 새-브랜치-이름
# 생성된 브랜치로 전환하기 
git checkout 새-브랜치-이름 
# 파일 추가하기 
touch new-file.js
# 수정사항 커밋하기 
git add .
git commit -m "새 파일 추가"
# 새 원격 브랜치로 푸시하기 
git push --set-upstream origin 새-브랜치-이름

위의 예시에서 origin 새-브랜치-이름은 원격 브랜치가 됩니다. 새 원격 브랜치로 푸시하기 전에 먼저 새 브랜치를 만들고 변경 사항을 커밋했다는 것을 눈치채셨나요?

하지만 이미 기존에 있는 원격 브랜치와 그 브랜치의 모든 변경이력을 로컬 환경으로 가져오려면 어떻게 할까요?

이때 원격 브랜치를 체크아웃하면 됩니다.

원격 브랜치 체크아웃하기

다른 개발자가 생성한 원격 브랜치의 내용을 로컬 환경에 가져오려면 다음과 같은 방법을 사용해야 합니다.

1. 모든 원격 브랜치 가져오기(fetch)

git fetch origin

이 명령어를 실행하면 원격 저장소의 모든 원격 브랜치를 로컬에 가져옵니다. 위 예시에서는 origin 원격 저장소의 데이터를 가져옵니다. upstream 원격 저장소의 브랜치를 가져오려면 git fetch upstream을 사용해야겠죠.

2. 체크아웃할 수 있는 브랜치 목록 보기

체크아웃할 수 있는 브랜치 목록을 보려면 다음과 같은 명령어를 실행합니다.

git branch -a

명령어를 실행하면 체크아웃할 수 있는 브랜치 목록이 출력됩니다. 원격 브랜치에는 remotes/origin 접두사가 붙은 것을 확인할 수 있습니다.

3. 원격 브랜치의 변경이력 가져와 병합하기(Pull)

원격 브랜치에는 직접 작업할 수 없습니다. 변경 사항을 추가하기 위해서는 원격 브랜치의 복사본이 필요합니다. 예를 들어 fix-failing-tests라는 원격 브랜치를 복사하고 싶다면 다음과 같은 명령어를 실행합니다.

git checkout -b fix-failing-tests origin/fix-failing-tests

이 명령어를 다음과 같은 세 동작이 실행됩니다.

  • fix-failing-tests라는 새 브랜치를 생성하고,
  • 새 브랜치로 체크아웃이 되며,
  • origin/fix-falling-tests의 변경이력을 새 브랜치로 가져옵니다.

이제 원하는 원격 브랜치의 복사본이 있습니다. 해당 원격 브랜치에 커밋도 푸시할 수 있습니다. 바로 시도해 볼까요?

예시:

touch new-file.js
git add .
git commit -m "새 파일 추가"
git push

이렇게 하면 커밋된 변경 내용이 origin/fix-failing-tests로 푸시 됩니다. git push origin fix-failing-tests와 같이 커밋을 푸시할 원격 브랜치를 지정할 필요가 없이 git push 명령어만 실행했다는 것을 확인하셨나요? Git이 로컬 브랜치가 자동으로 원격 브랜치를 추적하도록 설정하기 때문입니다.

마치며

Git 브랜치를 통해 프로젝트 개발 작업을 진행하면서 수월하게 협업할 수 있습니다.

다시 말해, 브랜치를 활용하면 여러 개발자가 동시에 다양한 작업을 할 수 있습니다.

또한 원격 브랜치 체크아웃 기능을 사용하면 개발자가 로컬 환경에 원격 브랜치를 복사와 변경하기, 그리고 원격 브랜치로 푸시하기가 가능해지기 때문에 협업이 더욱 원활해집니다.