git pull
git pull
명령은 원격 리포지토리에서 콘텐츠를 가져오고 다운로드한 다음 로컬 리포지토리를 콘텐츠와 일치하도록 즉시 업데이트하는 데 사용됩니다. 원격 업스트림 변경 사항을 로컬 리포지토리에 병합하는 작업은 Git 기반 공동 작업 워크플로에서 일반적입니다. git pull
명령은 실제로 git fetch 및 이어지는 git merge라는 두 가지 다른 명령의 조합입니다. 작업의 첫 단계에서 git pull
은 HEAD
가 가리키는 로컬 브랜치로 범위가 지정된 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 Cloud에서 Git에 대해 알아보기
위의 다이어그램에서 새 커밋인 H를 볼 수 있습니다. 이 커밋은 원격 A-B-C 커밋의 콘텐츠를 포함하고 로그 메시지를 결합한 새 병합 커밋입니다. 이 예제는 소수의 git pull
병합 전략 중 한 개입니다. 병합 커밋 대신 다시 지정(rebase) 병합 전략을 사용하기 위해 --rebase
옵션을 git pull
에 전달할 수 있습니다. 다음 예제에서는 다시 지정 풀(rebase pull)이 작동하는 방식을 보여줍니다. 현재 첫 번째 다이어그램의 시작점에 있고 git pull --rebase
를 실행했다고 가정합니다.
이 다이어그램에서는 이제 다시 지정 풀(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 fetch
는 마지막 확인 이후 오리진의 메인 버전에 진행된 사항이 있음을 보여줍니다. 그런 다음 git merge
는 원격 메인을 로컬 메인에 즉시 통합합니다.
git pull 및 동기화
git pull
은 원격 콘텐츠를 '동기화'하는 역할을 수행하는 명령 중 하나입니다. git remote
명령은 동기화 명령이 작동할 원격 엔드포인트를 지정하는 데 사용합니다. git push
명령은 콘텐츠를 원격 리포지토리에 업로드하는 데 사용합니다.
git fetch
명령은 git pull
명령과 혼동될 수 있습니다. 둘 다 원격 콘텐츠를 다운로드하는 데 사용합니다. git pull
및 git 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 HEAD
및 git merge HEAD
와 동일합니다. 여기서 HEAD
는 현재 브랜치를 가리키는 참조입니다.
원격 리포지터리에 git pull
git checkout new_feature
git pull <remote repo>
이 예제에서는 먼저 체크아웃을 수행하고 git pull
이 실행됩니다. 이렇게 하면 git merge
를 시작합니다.
병합 대신 git 풀 다시 지정(pull rebase)
다음 예제에서는 다시 저정(rebase)을 사용하여 중앙 리포지토리의 기본 브랜치와 동기화하는 방법을 보여줍니다.
git checkout main
git pull --rebase origin
이렇게 하면 로컬 변경 사항을 다른 모든 사용자가 이미 기여한 사항의 상단으로 이동합니다.
이 문서 공유
다음 토픽
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.