Git 포스 풀
이 튜토리얼에서는 Git에서 강제로 원격 저장소의 변경 사항을 가져오는 방법을 배웁니다.
때로는 로컬 수정 사항을 버리고 협업 개발 환경에서 원격 리포지토리의 업데이트로 교체해야 할 수도 있습니다.
git pull
명령을 사용하여 원격 저장소에서 로컬 저장소의 로컬 분기로 변경 사항을 가져옵니다.
git pull
명령은 로컬 분기의 변경 사항이 원격 리포지토리의 변경 사항 뒤에 있는 경우에만 성공합니다.
로컬 브랜치와 원격 저장소 변경 사항이 분기되어 로컬 변경 사항을 취소하려면 git pull
을 강제로 수행하여 로컬 변경 사항을 덮어써야 합니다.
이제 예를 들어 자세히 설명하겠습니다.
git fetch
, git reset
및 git merge
를 사용하여 Git에서 원격 변경 강제 풀링 수행
git pull
명령은 단일 작업이 아닙니다. git pull
명령은 명령 viz를 실행합니다. git fetch
를 사용하여 원격 저장소에서 데이터를 가져온 다음 git merge
명령을 사용하여 해당 변경 사항을 로컬 저장소에 병합합니다.
따라서 git pull
명령은 다음과 같이 두 명령을 실행합니다.
$ git fetch
$ git merge origin/$CURRENT_BRANCH
git fetch
명령은 원격 저장소에서 최신 변경 사항을 다운로드합니다. 로컬 저장소의 병합
또는 리베이스
를 수행하지 않습니다.
위에 제공된 git merge
명령은 $CURRENT_BRANCH
에 추가된 별칭 origin
으로 제공된 원격 저장소의 변경 사항을 병합합니다. 이 변경 사항은 로컬 저장소의 로컬 분기에 아직 존재하지 않습니다.
따라서 로컬 저장소의 로컬 분기가 원격 저장소의 분기와 다른 경우 git pull
이 실패합니다.
로컬 브랜치의 작업 트리에 있는 파일을 로컬로 변경했을 수 있습니다. 따라서 git pull
이 실패합니다.
이제 원격 저장소의 변경 사항을 위해 로컬 변경 사항을 버리기로 결정할 수 있습니다.
따라서 로컬 수정 사항을 덮어쓸 변경 사항을 강제로 가져와야 합니다.
원격 변경 사항을 강제로 가져오려면 다음과 같이 해야 합니다.
$ git fetch
$ git reset --hard HEAD
$ git merge origin/$CURRENT_BRANCH
--hard
옵션이 있는 git reset
명령은 분기를 방금 가져온 것으로 재설정합니다. 또한 추적된 파일에 대한 모든 로컬 변경 사항을 무시하고 추적되지 않은 파일은 삭제됩니다.
따라서 로컬 변경 사항이 손실되므로 주의하여 사용하십시오.
또는 변경 사항을 가져오기 전에 로컬 변경 사항을 저장할 수 있습니다. 변경 사항을 가져올 때 git stash
를 사용하여 변경 사항을 숨길 수 있습니다.
우리는 다음과 같이 할 수 있습니다.
$ git fetch
$ git stash
$ git merge origin/$CURRENT_BRANCH
$ git stash pop
따라서 git stash
를 사용할 때 더 이상 로컬 저장소의 로컬 분기에 대해 git reset
을 수행할 필요가 없습니다.
git stash pop
을 사용하여 stash에서 로컬 변경 사항을 가져왔습니다.