원격 저장소와 로컬 저장소의 작업 내용이 동기화되어 있지 않은 상태에서는 원격 저장소의 내역을 로컬 저장소에 반영한 후 로컬 저장소의 변경 내역을 원격 저장소에 반영하게 된다.
git pull 명령어란?
원격 저장소의 내역을 로컬 저장소로 받아야 하는데 pull 명령을 이용한다. 이는 사실상 두가지 명령어를 결합한 것이다.
- git fetch : 원격 저장소의 변경 사항을 로컬로 다운로드한다.
- git merge : 다운로드한 변경사항을 현재 브랜치와 병합한다.
기본 사용법
기본적인 git pull 명령어는 다음과 같은 형태로 사용한다.
git pull [원격저장소이름] [브랜치이름]
- 원격 저장소 이름 : 일반적으로 origin 이 사용된다.
- 브랜치 이름 : 병합할 브랜치 이름이다.
만약 이 두 가지를 생략하면 현재 브랜치에서 추적 중인 원격 브랜치의 변경사항을 가져온다.
git pull 사용 예
기본 사용 예
로컬 브랜치에서 원격 저장소의 변경사항을 가져오려면 다음과 같이 실행한다.
git pull origin main
위 명령어는 원격 저장소 origin의 main 브랜치에서 변경사항을 가져와 로컬 브랜치와 병합한다.
충돌 해결 예
병합 과정에서 충돌(conflict)이 발생할 수도 있다. 예를 들어 아래와 같은 상황을 가정해 본다.
- 로컬에서 파일을 수정한 뒤 커밋하지 않았다.
- 원격 저장소의 동일한 파일도 수정되었다.
이 경우 git pull 실행 시 충돌 메시지가 나타난다.
CONFLICT (content): Merge conflict in example.txt
해결 방법은 아래와 같다.
- 충돌한 파일을 열고 충돌 내용을 확인한다.
- 원하는 대로 내용을 수정한 후 저장한다.
- 수정 내용을 병합 완료로 표시한다.
- 병합을 완료한다.
git add example.txt
git commit
--rebase 옵션 사용
git pull 명령어는 기본적으로 병합 전략을 사용하지만, --rebase 옵션을 사용하면 병합 대신 리베이스를 수행한다.
git pull --rebase origin main
리베이스는 변경 내역을 보다 깔끔하게 유지하고자 할 때 유용하다. 다만 충돌 발생 시 처리 과정이 더 복잡해질 수 있다.
--no-rebase 업션 사용
--no-rebase 옵션은 리베이스 대신 기본 병합 전략을 강제로 사용하도록 한다. 이 옵션은 pull.rebase 설정이 true로 되어 있는 경우에도 병합 방식을 사용하고 싶을 때 유용하다.
git pull --no-rebase origin main
예를 들어, 리베이스가 기본값으로 설정된 환경에서 간단한 병합을 선호할 경우 이 옵션을 활용할 수 있다.
주의 할 점
로컬 변경 사항 저장
git pull을 실행하기 전에 로컬 변경사항을 커밋하거나 스태싱(stashing)해야 한다. 그렇지 않으면 병합 충돌이 발생할 수 있다.
git stash save "임시저장"
git pull origin main
git stash pop
알맞은 브랜치 확인
원격 브랜치와 로컬 브랜치를 잘못 설정하면 원하지 않는 병합이 일어날 수 있다.
pull 명령 뒤에 --no-rebase 옵션을 붙이면, 리베이스를 하지 않으며 작업 내역을 로컬 저장소로 내려 받는다.
> git pull --no-rebase
원격 저장소와 로컬 저장소의 작업 내역에 차이가 있다면 합쳐지면서 머지 커밋이 하나 생성된다. 분기된 내역을 합치면 로컬 저장소와 원격 저장소의 내역이 동기화 되므로 푸시할 수 있는 상태가 된다.
> git pull --rebase
타임라인을 원격에 맞춰 붙인 다음 로컬 작업을 그 다음에 잘라 붙이는 방법
'IT & Dev.' 카테고리의 다른 글
테슬라 마스터 플랜 : 미래를 향한 비전 (0) | 2025.02.10 |
---|---|
[git] 체크아웃(checkout) (0) | 2025.01.07 |
[git] log 로그 (0) | 2024.12.31 |
AI의 삼파전: ChatGPT vs Claude vs Gemini (0) | 2024.09.19 |
[git] 태그 (tag), 꼬리표 달기 (0) | 2023.12.12 |