Git은 프로젝트의 여러 개별 개발 라인을 동시에 관리할 수 있게 해주는 버전 관리 시스템입니다. 이러한 개발 라인을 '브랜치(branch)'라고 부르며, 원격 저장소에서 특정 브랜치의 최신 버전만 따로 가져올 수도 있고, 모든 브랜치의 최신 버전을 한 번에 가져올 수도 있습니다.
이 가이드에서는 git fetch --all과 git pull --all 명령어를 사용해 원격 저장소의 변경 사항을 가져오는 방법을 자세히 알아보겠습니다.
브랜칭(Branching)이란?
블로그 웹사이트를 개발하고 있다고 가정해 보겠습니다. 이번에는 사용자가 댓글을 남길 수 있는 기능을 추가하려고 하는데, 아직 개발 중인 기능이기 때문에 메인 버전에는 포함하고 싶지 않은 상황입니다.
이럴 때 Git 브랜치가 유용하게 사용됩니다. 'comments'라는 이름의 브랜치를 만들어 댓글 기능과 관련된 모든 코드를 저장하면, 웹사이트에 배포된 메인 코드베이스에 영향을 주지 않으면서 독립적으로 새 기능을 개발할 수 있습니다.
브랜치는 로컬 또는 원격에 저장될 수 있습니다. 로컬 환경에서 작업 중인 프로젝트의 브랜치는 로컬 브랜치가 되며, 원격 저장소에 저장된 브랜치는 원격 브랜치(remote branch)라고 부릅니다.
Git으로 모든 브랜치 가져오기(Fetch)
'blog-site'라는 프로젝트를 진행 중이라고 가정해 보겠습니다. 이 프로젝트에는 origin/master와 origin/dev라는 두 개의 브랜치가 있습니다.
dev 브랜치에는 실험적인 기능들이 담겨 있습니다. 다른 협업자가 두 브랜치 모두에 변경 사항을 푸시(push)했을 가능성이 있으므로, 변경 사항이 존재한다면 해당 메타데이터를 확인하고 싶습니다.
이때 fetch 명령어를 사용합니다. fetch 명령어는 원격 브랜치의 최신 업데이트에 대한 메타데이터를 가져오도록 Git에 지시합니다. 단, fetch 명령어는 로컬 저장소에 저장된 파일 자체를 수정하지는 않는다는 점에 유의하세요.
모든 원격 브랜치를 추적하고 각 브랜치의 메타데이터를 가져오려면 --all 플래그와 함께 git fetch 명령어를 실행하면 됩니다:
git fetch --all
이 명령어를 실행하면 다음과 같은 결과가 출력됩니다:
Fetching origin remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/career-karma-tutorials/blog-site 3fcea0c..da74d68 dev -> origin/dev
fetch 명령어가 원격 저장소의 모든 변경 사항을 성공적으로 가져왔습니다. Git은 원격 dev 브랜치에 로컬 머신에 없는 변경 사항이 있음을 인식했으며, 우리는 해당 커밋들의 메타데이터를 방금 검색한 것입니다.
특정 브랜치 하나의 메타데이터만 가져오고 싶다면 git fetch origin <브랜치명> 명령어를 사용하면 됩니다.
Git으로 모든 브랜치 가져오기(Pull)
메타데이터 확인뿐 아니라 로컬 작업 복사본까지 함께 업데이트하고 싶다면 어떻게 해야 할까요? 이때 git pull 명령어가 유용합니다.
이제 저장소에 변경 사항이 있다는 것을 알았고, 이 변경 사항들을 로컬 저장소와 병합(merge)하는 데 동의한다면, git pull 명령어로 변경 사항을 로컬 머신에 직접 내려받을 수 있습니다:
git pull --all
--all 플래그를 붙이면 모든 브랜치에서 변경 사항을 가져오겠다는 의미가 됩니다. 실행 결과는 다음과 같습니다:
Fetching origin remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/career-karma-tutorials/blog-site 3fcea0c..da74d68 dev -> origin/dev Updating 3fcea0c..da74d68 Fast-forward README.md | 1 + 1 file changed, 1 insertion(+)
git pull 명령어는 먼저 git fetch를 실행하여 변경 사항이 있는지 확인합니다. fetch 작업이 커밋 메타데이터를 반환하면, 이어서 pull이 원격 저장소의 모든 변경 사항을 가져와 로컬 파일을 실제로 업데이트합니다.
출력 결과를 보면 원격 저장소에서 README.md 파일이 변경되었음을 확인할 수 있습니다. pull 작업을 실행했기 때문에 이제 그 변경 사항이 로컬 머신에도 반영되었습니다.
특정 브랜치 하나의 코드만 가져오려면 git pull origin <브랜치명> 명령어를 사용하면 됩니다.
마무리
git fetch --all 명령어는 저장소의 모든 브랜치에 적용된 변경 사항의 메타데이터를 가져오고, git pull --all 명령어는 모든 브랜치의 변경 사항을 로컬 머신까지 실제로 내려받습니다. 두 명령어의 차이를 정확히 이해했다면, 이제 여러분도 Git에서 모든 브랜치를 전문가처럼 자유롭게 관리할 수 있습니다!