Close

git pull

git pull 명령은 원격 리포지토리에서 콘텐츠를 가져오고 다운로드한 다음 로컬 리포지토리를 콘텐츠와 일치하도록 즉시 업데이트하는 데 사용됩니다. 원격 업스트림 변경 사항을 로컬 리포지토리에 병합하는 작업은 Git 기반 공동 작업 워크플로에서 일반적입니다. git pull 명령은 실제로 git fetch 및 이어지는 git merge라는 두 가지 다른 명령의 조합입니다. 작업의 첫 단계에서 git pullHEAD가 가리키는 로컬 브랜치로 범위가 지정된 git fetch를 실행합니다. 콘텐츠를 다운로드하면 git pull은 병합 워크플로에 진입합니다. 새 병합 커밋이 만들어지고 HEAD가 새 커밋을 가리키도록 업데이트됩니다.


git pull 사용


작동 방식

git pull 명령은 먼저 git fetch를 실행하여 지정된 원격 리포지토리 콘텐츠를 다운로드합니다. 그런 다음 git merge가 실행되어 원격 콘텐츠 refs 및 heads를 새 로컬 병합 커밋으로 병합합니다. 풀링과 병합 프로세스를 더 잘 보여주기 위해 다음 예를 고려해 보겠습니다. 메인 브랜치와 원격 오리진이 있는 리포지토리가 있다고 가정합니다.

이 시나리오에서 git pull은 로컬 및 메인이 분기된 지점에서 모든 변경 사항을 다운로드합니다. 이 예에서 분기 지점은 E입니다. git pull은 분기된 원격 커밋인 A-B-C를 가져옵니다. 풀 프로세스는 새로 분기된 원격 커밋의 콘텐츠를 포함하는 새 로컬 병합 커밋을 만듭니다.

콘솔 창
관련 자료

고급 Git 로그

Bitbucket 로고
솔루션 보기

Bitbucket Cloud에서 Git에 대해 알아보기

위의 다이어그램에서 새 커밋인 H를 볼 수 있습니다. 이 커밋은 원격 A-B-C 커밋의 콘텐츠를 포함하고 로그 메시지를 결합한 새 병합 커밋입니다. 이 예제는 소수의 git pull 병합 전략 중 한 개입니다. 병합 커밋 대신 다시 지정(rebase) 병합 전략을 사용하기 위해 --rebase 옵션을 git pull에 전달할 수 있습니다. 다음 예제에서는 다시 지정 풀(rebase pull)이 작동하는 방식을 보여줍니다. 현재 첫 번째 다이어그램의 시작점에 있고 git pull --rebase를 실행했다고 가정합니다.

중앙 git 리포지토리에서 로컬 git 리포지토리

이 다이어그램에서는 이제 다시 지정 풀(rebase pull)은 새 H 커밋을 만들지 않습니다. 대신, 다시 지정(rebase)은 원격 커밋 A--B--C를 복사하고 로컬 커밋 E--F--G가 로컬 오리진/메인 커밋 기록에서 A--B--C 뒤에 나타나도록 다시 작성합니다.

일반적인 옵션


git pull <remote>

지정된 원격의 현재 브랜치 복사본을 가져와서 즉시 로컬 복사본으로 병합합니다. 이것은 git fetch <remote> 및 이어지는 git merge origin/<current-branch>와 동일합니다.

git pull --no-commit <remote>

기본 호출과 비슷하게 원격 콘텐츠를 가져오지만 새 병합 커밋을 만들지는 않습니다.

git pull --rebase <remote>

이전 pull과 마찬가지로 git merge 명령을 사용하여 원격 브랜치를 로컬 브랜치와 통합하는 대신 git rebase를 사용합니다.

git pull --verbose

가져오는 동안 다운로드 중인 콘텐츠와 병합 세부 정보를 표시하는 자세한 출력을 제공합니다.

git pull 설명


git pull은 Git에 svn update와 같은 명령이라고 생각할 수 있습니다. 로컬 리포지토리를 업스트림 변경 사항과 쉽게 동기화할 수 있습니다. 다음 다이어그램에서는 풀링 프로세스의 각 단계를 설명합니다.

git pull

리포지토리가 동기화되어 있다고 생각하고 시작하지만 git fetch는 마지막 확인 이후 오리진의 메인 버전에 진행된 사항이 있음을 보여줍니다. 그런 다음 git merge는 원격 메인을 로컬 메인에 즉시 통합합니다.

git pull 및 동기화


git pull은 원격 콘텐츠를 '동기화'하는 역할을 수행하는 명령 중 하나입니다. git remote 명령은 동기화 명령이 작동할 원격 엔드포인트를 지정하는 데 사용합니다. git push 명령은 콘텐츠를 원격 리포지토리에 업로드하는 데 사용합니다.

git fetch 명령은 git pull 명령과 혼동될 수 있습니다. 둘 다 원격 콘텐츠를 다운로드하는 데 사용합니다. git pullgit fetch 사이에는 중요한 안전 구분이 있습니다. git fetch 명령은 "안전한" 옵션으로 여겨지는 반면 git pull 명령은 안전하지 않은 옵션으로 여겨질 수 있습니다. git fetch 명령은 원격 콘텐츠를 다운로드하며 로컬 리포지토리의 상태를 변경하지 않습니다. 반면, git pull은 원격 콘텐츠를 다운로드하고 로컬 상태가 콘텐츠와 일치하도록 즉시 변경하려고 시도합니다. 따라서 의도치 않게 로컬 리포지토리 충돌 상태로 이어질 수 있습니다.

다시 저정(rebase)을 통한 풀링


--rebase 옵션은 불필요한 병합 커밋을 방지하여 선형 기록을 보장하는 데 사용할 수 있습니다. "다른 모든 사용자가 완료한 항목에 내 변경 사항을 적용하고 싶다"고 말하는 것과 같기 때문에 많은 개발자가 병합(merging)보다 다시 지정(rebasing)를 선호합니다. 이런 의미에서 git pull 명령을 --rebase 플래그와 함께 사용하는 것은 일반 git pull보다는 svn update와 유사합니다.

실제로 --rebase를 사용하는 풀링(pulling)은 전용 구성 옵션이 있는 매우 일반적인 워크플로입니다.

git config --global branch.autosetuprebase always

이 명령을 실행하면 모든 git pull 명령이 git merge 대신 git rebase를 통해 통합됩니다.

git pull 예제


다음 예제에서는 일반적인 시나리오에서 git pull을 사용하는 방법을 보여줍니다.

기본 동작

git pull

git pull의 기본 호출의 실행은 git fetch origin HEADgit merge HEAD와 동일합니다. 여기서 HEAD는 현재 브랜치를 가리키는 참조입니다.

원격 리포지터리에 git pull

git checkout new_feature
git pull <remote repo>

이 예제에서는 먼저 체크아웃을 수행하고 브랜치로 전환합니다. 이어서 전달과 함께 git pull이 실행됩니다. 이렇게 하면 에서 newfeature 브랜치가 암시적으로 풀다운됩니다. 다운로드가 완료되면 git merge를 시작합니다.

병합 대신 git 풀 다시 지정(pull rebase)

다음 예제에서는 다시 저정(rebase)을 사용하여 중앙 리포지토리의 기본 브랜치와 동기화하는 방법을 보여줍니다.

git checkout main
git pull --rebase origin

이렇게 하면 로컬 변경 사항을 다른 모든 사용자가 이미 기여한 사항의 상단으로 이동합니다.


이 문서 공유

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

도구로 가득한 벽을 사용하여 협업하는 사람들

Bitbucket 블로그

DevOps 일러스트레이션

DevOps 학습 경로

Atlassian 전문가와 함께 하는 Demo Den 기능 데모

Bitbucket Cloud가 Atlassian Open DevOps와 작동하는 방법

DevOps 뉴스레터 신청

Thank you for signing up