요약
"git pull"과 "git fetch"의 주요 차이점은 "git pull"은 변경 내용을 로컬 복사본과 자동으로 병합하는 반면, "git fetch"는 변경 내용만 다운로드한다는 것입니다.
원격 저장소와 local저장소의 소스코드를 일치시키는 방법
git fetch --prune origin
git reset --hard origin/main
pull을 받으면 원격과 내 로컬이 일치된다는 것은 착각이다. pull은 fetch + merge이다. 로컬에 있는 코드와 원격에 있는 코드가 합쳐지며 merge가 되는데
로컬을 원격에 아예 일치시키고 싶다면
fetch를 통해 깃 헙 원격 저장소와 일치시킨다. 그 후 reset을 통해 방금 전 동기화된 remote tracking branch (origin/main)에 로컬 브랜치를 일치시킨다.
여기서 git prune이란?
fetching 하기 전, 리모트에 존재하지 않는 리모트 트래킹 브랜치를 삭제
git reset --hard origin/main의 의미?
origin/main branch와 일치시킨다. (git fetch로 remote tracking branch의 커밋을 remote 저장소의 브랜치와 일치시켰기에 효용이 있다)
git clean이란?
작업하고 있던 파일을 Stash 하지 않고 단순히 그 파일들을 삭제하고 싶은 경우에 사용하는 명령어
추적되고 있지 않는(unstage) 경우의 파일이 삭제되는 경우
리모트 트래킹 브랜치란?
밑에 링크로 남긴 스택오버플로우 두번째 답변이 리모트 트래킹 브랜치에 대한 이해를 할 때 많은 도움이 되었다.
출처
Git Pull
"git pull"은 원격 리포지토리에서 로컬 리포지토리로 변경 내용을 가져와 병합하는 데 사용되는 명령입니다. 즉, "git pull"은 두 가지 작업을 결합합니다: "git fetch"와 "git merge". "git pull"을 실행하면 Git이 원격 리포지토리에서 최신 변경 내용을 가져와 로컬 복사본과 자동으로 병합합니다.
Git Fetch
반면에 "git fetch"는 원격 리포지토리에서 최신 변경 내용만 다운로드할 뿐 로컬 복사본과 병합하지 않습니다. 즉, "git fetch"를 실행한 후 "git merge" 명령을 사용하여 로컬 복사본과 변경 내용을 수동으로 병합해야 합니다.
주요 차이점
"git pull"과 "git fetch"의 주요 차이점은 "git pull"은 변경 내용을 로컬 복사본과 자동으로 병합하는 반면, "git fetch"는 변경 내용만 다운로드한다는 것입니다.
또 다른 중요한 차이점은 병합하기 전에 변경 내용을 검토할 수 있으므로 일반적으로 "git pull"보다 "git fetch"가 더 안전하다는 것입니다. 또한 "git fetch"는 병합을 수행하지 않고 변경 내용만 다운로드하기 때문에 "git pull"보다 빠를 수 있습니다.
요약하면, 로컬 사본을 최신 변경 사항으로 빠르게 업데이트하고 자동으로 병합하려는 경우 "git pull"을 사용하는 것이 가장 좋습니다. 그러나 병합하기 전에 변경 내용을 검토하거나 자동 병합을 피하려면 "git 가져오기"가 더 나은 옵션입니다.
Git으로 작업할 때는 "git pull"과 "git fetch"의 차이점을 이해하는 것이 중요합니다. 다양한 시나리오에서 어떤 명령을 사용해야 하는지 알면 보다 효율적으로 작업하고 잠재적인 충돌을 피할 수 있습니다.