지금까지 원격 저장소를 clone하거나, 로컬 저장소의 변경 내용(커밋)을 원격 저장소로 업로드(push) 하는 것에 대해 알아봤고
그 기본 workflow에 대해 연습도 해보았습니다.
이번에 알아볼 내용은 원격 저장소 내용을 로컬 저장소로 내려받는 pull
과 fetch
에 대해 알아보겠습니다.
원격 저장소와 로컬 저장소의 master
브랜치가 동일한 커밋을 가지고 있다고 가정합시다.
그런데 이 상태에서 로컬 master
에 작업한 후 하나의 커밋을 하였고,
원격 저장소에는 누군가 작업한 후 원격 master
에 3개의 커밋을 push
하였다고 가정합니다.
원격 저장소의 변경사항을 어떻게 가져올 수 있을까요?
fetch
는 원격 저장소의 변경 사항을 가져오지만, working tree까지 통합하는 것이 아닌 local repo에만 변경 사항을 저장합니다.
git fetch <remote> <branch> #특정 브랜치의 최신 정보만 가져오기
git fetch <remote> #원격 저장소의 모든 최신 정보 가져오기
fetch
를 진행하면 origin master 브랜치의 변경사항을 가져올 수 있습니다.
하지만 working tree에 통합시키지는 않아서 현재 내 작업 영역에서 보이는 내용은 바뀌지 않습니다.
git checkout origin/master
위 명령어로 가져온 변경사항이 뭔지 확인해 볼 수 있습니다.
git pull <remote> <branch>
fetch
와 pull
의 차이점은 working directory까지 가져온 변경사항을 통합하냐 하지 않느냐 입니다.
pull
은 가져온 변경사항을 working directory까지 통합시키며 HEAD의 위치까지 변경시킵니다.
git pull
= git fetch
+ git merge
와 같습니다.
master
브랜치를 가정하겠습니다.
git fetch
를 진행하면 origin/master
의 변경 사항(커밋)을 로컬 저장소로 가져와 업데이트 합니다.
따라서 origin/master
와 master
간의 커밋에 차이가 발생하게 됩니다.
git pull
은 origin/master
를 master
에 병합하는 merge
작업까지 같이 합니다.
따라서 merge를 수행했다는 추가 커밋이 master
브랜치에 남게 될 것입니다.
그리고 pull
작업은 현재 내가 어떤 브랜치에 있던 간에 명령줄에 명시한 remote branch의 커밋을 현재 작업중인 브랜치에 병합합니다.
merge
작업을 같이 하기 때문에 항상 fast-forward-merge가 발생하는 것은 아닙니다.
충돌이 발생할 수 있으며(실제로는 꽤 자주) 앞에서 공부한 conflict 해결을 사용해서 충돌을 해결하면 됩니다.
🙏🙏🙏
git 시리즈에 작성한 포스팅은
https://www.udemy.com/course/best-git-github/
유데미 강좌
https://www.yes24.com/Product/Goods/110795446
모두의 깃 & 깃허브
위 내용을 참고하였으며, 제 실습화면을 캡쳐한 사진 외의
대부분의 사진들은 인터넷 강좌에서 제공하는 자료를 캡쳐하였습니다.
깃 시리즈 포스팅의 내용 및 사진을 절대로 상업적 목적으로 무단 복사하지 말아주세요.
또한 작성한 포스팅은 문제가 발생할 시 캡처 자료를 전부 삭제할 예정입니다.