Git pull과 fetch의 차이점
본격적인 이야기에 앞서 '클론'이란 무엇일까요? 클론 저장소(clone repository)는 원격 저장소를 복제한 저장소입니다. 이는 다른 사람의 소스 코드 복사본을 생성하는 것과 같으며, 개발을 할 때 보통 우리는 클론 저장소에서 작업을 진행하게 됩니다.
이러한 상황에서 만일 원격 저장소에 변경 사항이 생겼다면, 그 내용을 가져와 클론 저장소를 최신 상태로 유지해주어야 합니다.
git fetch : 로컬 Git에게 원격 저장소에서 최신 메타데이터 정보를 확인하라는 명령을 전달. 단 fetch는 원격 저장소에 변경사항이 있는지 확인만 하고, 변경된 데이터를 로컬 Git에 실제로 가져오지는 않는다.
git pull : 원격 저장소에서 변경된 메타데이터 정보를 확인할 뿐만 아니라 최신 데이터를 복사하여 로컬 Git에 가져온다.
git fetch
를 사용하면 마지막 pull 이후 원격 저장소 또는 브랜치에 적용된 변경 사항을 확인할 수 있습니다. 만일 원격 저장소에 변경 사항이 존재하는 상황에서 pull을 바로 실행하면 현재 브랜치와 작업 복사본의 파일이 변경되는 동시에 새로 작업한 내용이 손실되는 일이 생길 수 있습니다. 따라서 fetch로 변경 사항을 먼저 확인한 후 pull을 실행하는 방법이 보다 안전합니다.
https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/
pull vs fetch
pull과 fetch 의 차이점은 병합(Merge) 처리 여부이다
- PULL : pull 은 원격 레포지토리로부터 최신 커밋들을 내려받아서, 현재 로컬 브랜치와 자동으로 병합을 진행
- Fetch : 반면 fetch 는 원격 레포지토리에서 최신 commit 코드를 이름없는 임시 브랜치로 내려받고, 병합(merge)을 진행하지 않는다.
- 즉, 개발자가 수동으로 직접 merge 를 진행
- 이떄 브렌치는 FETCH_HEAD 의 이름으로 체크아웃이 가능
=> 정리해보면, 사실상 pull 명령은 내부적으로 봤을때 fetch 와 merge 의 과정을 포함하고 있는 것. fetch 이후 merge 를 수행하면 pull 명령과 동일한 수행 내역이 된다
언제 사용해야할까?🤔
fetch 와 pull 을 각각 언제 활용하는 것이 좋을까?
- pull : 원격 레포지토리가 로컬 레포지토리에 비해 더 최신 커밋이 존재할때만 내려받도록 한다.
- fetch : 원격 레포지토리와 로컬 레포지토리의 변경 사항이 다를때, 이를 비교 및 대조하는 확인 작업이 필요할때 사용.
- 확인 작업을 진행한 후에, git merge 명령어를 통해 최신 커밋내역을 반영하거나 충돌 문제를 해결할 수 있다.
'git \ github' 카테고리의 다른 글
[git][github] branch - Rebase (0) | 2023.09.08 |
---|---|
[git][github] branch 병합(merge) 충돌 해결 과정 (0) | 2023.09.08 |
[git][github] branch 병합(merge) (0) | 2023.09.07 |
[git][github] branch와 branch생성 (0) | 2023.09.07 |
[git][github] git 3가지 영역 (0) | 2023.09.05 |