Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

git pull 명령어 완벽 가이드: 원격 저장소 코드 가져오기 방법

git pull 명령어는 원격 저장소(remote repository)의 내용을 가져와 로컬 머신에 다운로드하는 Git의 핵심 명령어입니다. 이 명령어를 실행하면 로컬 저장소가 업데이트되어 원격 저장소의 최신 내용을 반영하게 됩니다.

Git으로 프로젝트를 진행하다 보면 원격 저장소의 코드를 로컬 환경으로 가져와야 하는 상황을 자주 마주하게 됩니다.

예를 들어 지역 식료품점의 주문을 관리하는 애플리케이션을 개발한다고 가정해 보겠습니다. 앱을 수정하는 과정에서 원격 저장소의 코드를 계속 가져와야 하는데, 이렇게 해야 항상 최신 코드를 기준으로 작업할 수 있기 때문입니다.

바로 이럴 때 git pull 명령어가 필요합니다. 이 글에서는 git pull 명령어의 기본 개념부터 실전 예제까지 자세히 알아보겠습니다.

git pull 명령어란 무엇인가?

"코드를 풀(pull)한다"는 것은 원격 저장소의 내용을 다운로드하여 컴퓨터에 저장하는 과정을 의미합니다.

Git에서 코드를 가져오려면 git pull 명령어를 사용하면 됩니다. git pull은 두 가지 명령어, 즉 git fetchgit merge를 연달아 실행해주는 편리한 명령어입니다.

git pull이 작동하는 방식을 단계별로 살펴보겠습니다.

먼저 git pull을 실행하면 가져오려는 원격 저장소가 다운로드됩니다. 저장소의 코드 사본과 관련된 Git 커밋들이 로컬 머신에 저장됩니다.

그다음 Git merge(병합) 작업이 실행됩니다. 이 작업은 로컬 머신에 있는 코드와 새로 가져온 코드를 하나로 병합하여 최종 버전의 코드베이스를 만듭니다. 이 최종 버전은 원격 브랜치에서 가져온 버전과 동일합니다.

git pull 명령어 사용법

git pull 명령어는 원격 저장소를 조회한 후 해당 코드를 로컬 저장소에 다운로드합니다. 기본 문법은 다음과 같습니다.

git pull <remote>

<remote> 매개변수에는 로컬 머신으로 가져오려는 원격 저장소의 이름을 입력합니다. 이 명령어를 실행하면 원격 저장소가 조회된 후 로컬 저장소 사본에 병합됩니다.

참고로 git pull은 추적되지 않는(untracked) 파일에는 영향을 주지 않습니다. 변경 사항은 Git이 추적 중인 원격 브랜치의 파일에만 적용되며, 이러한 변경 사항은 로컬 작업 트리(working tree)에 저장됩니다.

git pull origin

예를 들어 "origin" 저장소의 내용을 가져오고 싶다고 가정해 보겠습니다. origin은 저장소에서 기본적으로 사용되는 remote 값입니다. origin의 master 브랜치를 풀하려면 다음과 같이 입력합니다.

git pull origin/master

이 명령어를 실행하면 다음과 같은 결과가 출력됩니다.

From https://github.com/jamesgallagher432/demo-repository
   b53b22d..a7d8dc2  master     -> origin/master
Updating b53b22d..a7d8dc2
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)

먼저 명령어가 작업 중인 원격 저장소를 조회합니다. 그런 다음 식별된 변경 사항이 로컬 코드에 병합됩니다.

위 예시에서는 저장소의 README.md 파일이 로컬 머신의 파일과 달랐습니다. git pull을 실행하자 변경 사항이 감지되어 로컬에 병합된 것입니다.

git pull을 실행한 후에는 로컬 머신이 원격 저장소와 동일한 코드를 갖게 됩니다. 따라서 코드를 수정할 때 항상 최신 버전을 기준으로 작업하고 있다는 것을 확신할 수 있습니다. 이후 새로운 커밋이 원격 저장소에 푸시되면 git pull을 다시 실행하여 업데이트된 버전을 받아오면 됩니다.

파일이 제대로 업데이트되었는지 확인하려면 git log 명령어를 실행하세요. 이 명령어는 저장소에 적용된 모든 커밋 내역을 보여줍니다.

원격 저장소에서 특정 브랜치 풀하기

특정 브랜치의 코드만 가져와서 로컬에 저장하고 싶은 경우도 있습니다. 예를 들어 "dev-v0.9"라는 브랜치에서 작업하면서 해당 브랜치의 코드만 풀하고 싶다면 어떻게 해야 할까요?

이 경우 git checkout 명령어로 해당 브랜치로 전환한 후 git pull을 실행하면 됩니다. 문법은 다음과 같습니다.

git checkout <branch name>
git pull <remote>

앞선 예시에서는 다음 명령어를 실행합니다.

git checkout dev-v0.9
git pull origin

git checkout을 실행하면 "dev-v0.9" 브랜치로 전환됩니다. 이후 git pull origin 명령어가 "dev-v0.9" 브랜치의 코드 사본을 가져와 저장합니다. 코드가 다운로드되면 git merge 작업이 실행되어 로컬 저장소가 원격 저장소와 동일한 상태로 업데이트됩니다.

강제로 풀하기 (Force Pull)

풀 작업을 강제로 실행할 수도 있습니다. git pull을 강제하는 경우는 주로 추적되지 않는 파일 오류가 발생했을 때, 해당 오류를 무시하고 진행하고 싶을 때입니다.

단, 강제 풀을 실행하기 전에 로컬 변경 사항을 잃어도 괜찮은지 반드시 확인해야 합니다. 강제 풀은 모든 로컬 변경 사항을 덮어쓰기 때문입니다.

강제로 풀하려면 먼저 로컬에 저장하려는 커밋의 메타데이터를 가져옵니다.

git fetch --all

다음으로 현재 브랜치를 백업합니다. 미리 백업해두면 나중에 다시 돌아오고 싶은 변경 사항을 잃지 않을 수 있습니다.

git checkout -b backup

브랜치 백업이 완료되었으면 이제 reset 명령어로 변경 사항을 가져올 수 있습니다.

git reset --hard origin/master

origin/master는 실제 작업 중인 프로젝트의 원격 저장소 이름과 브랜치 이름으로 바꿔 입력해야 합니다. origin은 원격 저장소를 나타내며, master는 코드를 가져오는 브랜치의 이름입니다.

git pull vs. git fetch

git fetchgit pull은 모두 원격 저장소의 내용을 가져옵니다. 하지만 많은 개발자가 두 명령어의 차이점을 혼동하곤 합니다.

git fetch는 원격 저장소에서 메타데이터만 가져옵니다. 이 메타데이터는 로컬로 풀해올 수 있는 변경 사항이 있는지 확인하는 용도로 사용됩니다. 반면 git pull은 메타데이터와 함께 변경된 파일까지 모두 다운로드합니다.

즉, git pull은 먼저 fetch 작업을 실행합니다. 로컬 저장소와 원격 저장소 간에 차이가 발견되면 해당 변경 사항이 다운로드되는 방식입니다.

git pull을 사용할 때는 변경 사항을 받아들일 준비가 되어 있는지 확인해야 합니다. 그렇지 않으면 나중에 작업을 커밋할 때 코드 충돌(conflict)이 발생할 수 있습니다.

요약하면 다음과 같습니다.

  • git fetch: 로컬 저장소와 원격 저장소 사이에 변경 사항이 있는지만 확인할 때 사용
  • git pull: 메타데이터를 가져오는 것과 동시에 변경 사항까지 다운로드할 때 사용

마무리

git pull 명령어는 원격 Git 저장소에 저장된 코드를 가져와(fetch) 다운로드합니다. git pull은 git fetch와 비슷하지만, git fetch는 메타데이터만 가져오는 반면 git pull은 메타데이터와 저장소 파일의 변경 사항을 모두 가져온다는 점이 다릅니다.

이 글에서는 코드를 풀하는 기본 개념과 git pull 명령어의 실전 사용법을 살펴보았습니다. 이제 여러분도 프로 개발자처럼 git pull 명령어를 자유롭게 활용할 준비가 되었습니다!