본문 바로가기
Git&GitHub

[GitHub.08] 원격 브랜치 정보 가져오기 - git fetch

by 어쩌다개발 2023. 1. 23.
반응형

참고) Do It! 깃&깃허브 입문

패치(fetch)는 '불러오다, 가져오다' 라는 뜻이다. git fetch 명령은 원격 저장소의 정보를 가져오는 기능이 있다. pull 이 원격 저장소의 커밋을 무조건 지역 저장소와 합친다면, 패치 명령은 원격 브랜치에 어떤 변화가 있는지 그 정보만 가져온다. 팀 작업을 할 때 다른 사람이 수정한 소스를 한번 더 훑어보고 지역 저장소와 합치고 싶다면 pull 대신 fetch 를 사용해서 커밋을 가져 온 다음 지역 저장소와 합치면 된다.

1) git_office 저장소로 이동 한 후 git fetch 명령을 입력한다.
(참고로 git_home 저장소에서 f3.txt 파일을 새로 만들어주고, push 까지 진행한 뒤 작업해준다.)

2) ls -al 명령을 사용해서 어떤 파일이 있는지 살펴본다. 분명 원격 저장소에 있는 커밋을 가져왔는데 git_home 에서 새로 만들어준 f3.txt 이 보이지 않는다.

3) git log 명령을 사용해서 자세히 살펴본다. 커밋 해시 오른쪽을 보면 (HEAD -> main)만 보이고 원격 저장소의 origin/main은 보이지 않는다. 원격 저장소의 최신 커밋 정보를 가져왔지만 아직 지역 저장소에 합쳐지지 않아 원래 git_office 에 있던 최신 커밋만 나타나기 때문이다.

git log

4) git status 명령으로 추가로 확인해본다. 현재 브랜치가 origin/master에 비해 1개의 커밋이 뒤처져 있다고 나온다. 즉 원격 저장소의 최신 커밋 하나가 아직 지역 저장소에 반영되지 않았다는 뜻이다. git pull 명령을 사용하면 저장소를 업데이트 할 수 있다고 알려준다.

git status

fetch로 가져온 원격 저장소 정보는 origin/main 브랜치가 아닌 FETCH_HEAD 라는 브랜치로 가져온다. 이 브랜치로 가져온 정보는 지역 저장소에 바로 반영되지 않는다.

5) fetch 로 가져온 최신 커밋을 살펴보고 싶다면 FETCH_HEAD 브랜치로 체크아웃해서 확인한다. 최신 커밋에 origin/main 과 origin/HEAD 가 표시되어 있다. 즉, 이 커밋이 페치로 가져온 원격 브랜치의 최신 커밋이다. 이 내용을 살펴보고 원격 브랜치의 최신 커밋을 지역 저장소에 합칠지 말지를 결정하면 된다.

git checkout FETCH_HEAD
git log

6) 패치한 후에 최신 커밋을 현재 브랜치에 합치려면 git pull 명령어를 사용해서 원격 저장소의 소스를 내려받을 수도 있고, git merge 명령으로 FEtCH_HEAD 에 있는 커밋을 병합할 수도 있다. 

git checkout main
git merge FETCH_HEAD
git log

f3.txt 라는 최신 커밋이 지역 저장소에 반영된 것을 볼 수 있다.

 

git pull 명령은 git fetch 명령과 git merge FETCH_HEAD 명령 두 개를 합친 것과 같은 기능을 한다.
즉, git fetch를 사용해 원격 브랜치를 가져온 다음 git merge 명령을 사용해 원격 브랜치와 현재 브랜치를 합쳐주는 것을 git pull 명령으로 한꺼번에 할 수 있다.

반응형

댓글