HOWTO · Git
Git 가져오기와 Git 풀의 차이점
이 기사에서는 git pull 및 git fetch 명령의 실제 사용에 대해 논의하여 두 명령이 어떻게 다른지, 언제 사용하는 것이 적절한지 알아보겠습니다.
이 기사에서는 git pull 및 git fetch 명령의 실제 사용에 대해 설명하여 차이점과 사용 시기를 확인합니다.
Git 가져오기란 무엇입니까?
원격 저장소에는 아래와 같은 파일이 있습니다.

원격 및 로컬 리포지토리가 동기화되어 있습니다. 원격 저장소의 Sample.txt 파일을 변경해 보겠습니다.
파일에 임의의 것을 작성하고 변경 사항을 커밋합니다.

이 시점에서 원격 저장소에는 두 개의 커밋이 있고 로컬 저장소에는 하나의 커밋이 있습니다. 이는 로컬 저장소에 업데이트가 필요함을 의미합니다.
이 시점에서 git fetch가 편리합니다. 로컬 저장소에서 커밋 기록을 확인하기 위해 git log 명령을 실행해 보겠습니다.

로컬 저장소에는 Updated Sample.txt 커밋이 없습니다. 변경 사항을 확인하기 위해 git fetch를 사용합니다.
pc@JOHN MINGW64 ~/Git/Delftscopetech (main)
$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 709 bytes | 2.00 KiB/s, done.
From https://github.com/Wachira11ke/Delftscopetech
c43169e..2445daf main -> origin/main
위의 명령에서 기본 분기에 적용된 원격 저장소의 변경 사항을 볼 수 있습니다. git merge 명령을 사용하여 이러한 변경 사항을 로컬 저장소에 적용할 수 있습니다.
pc@JOHN MINGW64 ~/Git/Delftscopetech (main)
$ git merge origin main
Updating c43169e..2445daf
Fast-forward
Sample.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
커밋 기록을 확인하기 위해 git log 명령을 실행해 보겠습니다.
$ git log
commit 2445dafc118748a5cb53c5262b393ab0e1a9e235 (HEAD -> main, origin/main, origin/HEAD)
Author: Wachira11ke <100116527+Wachira11ke@users.noreply.github.com>
Date: Tue Mar 15 22:07:11 2022 +0300
Update Sample.txt
First Update
commit c43169e587ab7ab996087ff460e54032e83030f0
Author: Wachira11ke <100116527+Wachira11ke@users.noreply.github.com>
Date: Tue Mar 15 21:45:50 2022 +0300
Second commit
commit b2f77108396c9ae867d8e9d69c575eda99dd1436
Author: Wachira11ke <100116527+Wachira11ke@users.noreply.github.com>
Date: Mon Feb 21 10:00:23 2022 +0300
Initial commit
이 시점에서 로컬 및 원격 저장소가 모두 동기화됩니다. git pull 명령을 살펴보겠습니다.
Git 풀이란
원격 저장소로 돌아가서 파일을 더 변경해 보겠습니다. 임의의 숫자를 작성하고 변경 사항을 커밋합니다.
이제 원격 저장소에는 로컬 저장소보다 커밋이 하나 더 있습니다. git pull 명령을 실행하여 로컬 저장소를 업데이트할 수 있습니다.
pc@JOHN MINGW64 ~/Git/Delftscopetech (main)
$ git pull origin main
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 730 bytes | 3.00 KiB/s, done.
From https://github.com/Wachira11ke/Delftscopetech
* branch main -> FETCH_HEAD
2445daf..8089f2b main -> origin/main
Updating 2445daf..8089f2b
Fast-forward
Sample.txt | 1 +
1 file changed, 1 insertion(+)
로컬 리포지토리는 이제 원격 리포지토리와 함께 최신 상태입니다. git pull은 복합 명령(git fetch + git merge)이라는 결론을 내릴 수 있습니다.
변경 사항을 직접 가져와 병합합니다.
Git Fetch와 Git Pull의 차이
| Git Fetch | Git Pull |
|---|---|
| 원격 저장소에 대한 변경 사항을 확인합니다. | 원격 리포지토리의 변경 사항을 로컬 리포지토리와 직접 병합합니다. |
가져온 변경 사항은 .git 폴더로 업데이트됩니다. |
변경 사항은 로컬 리포지토리에 직접 적용됩니다. |
| 병합하기 전에 커밋을 검토할 수 있습니다. | 변경 사항을 즉시 업데이트합니다. |
| 갈등은 거의 나타나지 않습니다. | 병합 충돌이 발생할 수 있습니다. |