git pull
명령은 원격 저장소의 최신 커밋을 지역 저장소에 합쳐줌. 하지만 최신 커밋을 합치기 전에 원격 저장소에 어떤 변화가 있는지 먼저 살펴봐야 함. 이럴 때는 원격 브랜치에서 정보만 먼저 가져올 수 있음.
main
브랜치지역 저장소의 main 브랜치
처럼 원격 저장소도 만들 때 기본으로 main 브랜치
가 생성됨. 앞에서 사용한 git_home 저장소
, git_office 저장소
로 계속 연습함.
① 깃허브에서 test-1 저장소
로 접속한 후 commits
을 클릭해보면 마지막 커밋이 'add d'
임. 여기에서 원격 저장소
에 있는 HEAD
는 원격 저장소의 main 브랜치
를 가리킬 것이고, 원격 main 브랜치
는 'add d'
라는 최종 커밋을 가리킴.
② 터미널 창에서 git_home
디렉터리의 커밋 상태를 확인함.
git log --oneline
HEAD -> main
은 이 커밋이 지역 저장소의 최종 커밋이라는 뜻이고, origin/main
은 원격 저장소의 최종 커밋이라는 뜻임. 아직 git_home
디렉터리가 원격 저장소를 복제한 상태 그대로이기 때문에 지역 저장소와 원격 저장소 모두의 최종 커밋이 같음.
③ git_home
디렉터리에 새로운 커밋을 만듦.
vim f3.txt
▶ 새로운 파일을 만들고 내용을 입력. 저장함.
git add f3.txt
git commit -m "create f3.txt"
④ 커밋 로그를 확인해보면, HEAD -> main
(지역저장소) 은 방금 커밋한 create f3.txt
를 가리킴. 하지만 (origin/main, origin/HEAD)
는 아직 'add d'
커밋을 가리키고 있음.
git log --oneline
⑤ 이 상태에서 git status
를 입력하여 상태를 확인해보면, 현재 main
브랜치가 origin
에 있는 원격 main 브랜치
의 버전보다 하나 앞서 있으며, git push
명령으로 지역 저장소의 커밋을 원격 저장소로 올리라고 알려줌.
⑥ create f3.txt
커밋을 원격 저장소로 올림. 푸시한 후 main
과 origin/main
브랜치가 같은 커밋을 가리키고 있음.
git push
git log --oneline
git fetch
페치(fetch)
는 '불러오다, 가져오다'
라는 뜻임. 그래서 git fetch
명령은 원격 저장소의 정보를 가져오는 기능이 있음. pull 명령
이 원격 저장소의 커밋을 가져와서 무조건 지역 저장소와 합친다면, fetch 명령
은 원격 브랜치에 어떤 변화가 있는지 그 정보만 가져옴.
① git_office
디렉터리로 이동하며 git fetch
명령을 입력한 뒤 어떤 파일이 있는지 보면, 원격 저장소에 있던 커밋을 가져왔는데 git_home
에서 원격 저장소로 푸시했던 f3.txt
파일이 없음.
git fetch
ls -al
② git log --oneline
명령으로 확인해보면, 커밋 해시 오른쪽에 (HEAD -> main)
만 보이고 원격 저장소의 origin/main
은 보이지 않음. 원격 저장소의 최신 커밋 정보를 가져왔지만, 아직 지역 저장소에 합치지 않아 원래 git_office
에 있던 최신 커밋만 나타난 것임. git_status
로 확인해보면 "현재 브랜치가 origin/main
에 비해 1개의 커밋이 뒤처져 있다."고 하며 git pull
명령을 사용하면 지역 저장소를 업데이트 할 수 있다고 알려줌.
③ fetch
로 가져온 원격 저장소의 정보는 origin/main 브랜치가 아닌 FETCH_HEAD
브랜치로 가져옴. 이 브랜치로 가져온 정보는 지역 저장소에 바로 반영되지 않음. fetch
해서 가져온 최신 커밋을 살펴보고 싶다면 FETCH_HEAD
브랜치로 체크아웃해서 확인함.
git checkout FETCH_HEAD
『'분리된 헤드' 상태입니다. 둘러보고 실험적인 변경과 커밋을 수행할 수 있으며, 브랜치(분기)로 다시 전환하여 이 상태에서 수행한 커밋을 어떤 브랜치에도 영향을 주지 않고 삭제할 수 있습니다.
사용자가 만든 커밋을 유지하기 위해 새로운 브랜치(분기)를 만들려면 switch 명령을 사용하여 (지금 또는 나중에) 그렇게 할 수 있습니다. 예를 들면,
git switch -c 새로운 브랜치 이름
또는 다음 방법으로 이 작업을 실행 취소하십시오.
git switch -
HEAD는 현재 1005d34 create f3.txt 에 있습니다.』
④ git log
를 입력하면, 최신 커밋에 origin/main
과 origin/HEAD
가 표시되어 있음. 즉 이 커밋이 페치로 가져온 원격 브랜치의 최신 커밋임. 이 내용을 살펴보고 원격 브랜치의 최신 커밋을 지역 저장소에 합칠지 말지 결정하면 됨.
⑤ 페치한 후에 최신 커밋을 현재 브랜치에 합치려면 git pull
명령을 사용해서 원격 저장소의 소스를 내려받을 수도 있고, git merge
명령으로 FETCH_HEAD
에 있던 커밋을 병합할 수도 있음. git log
명령으로 create f3.txt
라는 최신 커밋이 지역 저장소에 반영된 것을 확인할 수 있음.
git checkout main
▶ main 브랜치로 이동
git merge FETCH_HEAD
▶ 병합
git log
git pull
명령은 git fetch
명령과 git merge FETCH_HEAD
명령 두 개를 합친 것과 같은 기능을 함. 즉, git fetch
를 사용해 원격 브랜치를 가져온 다음 git merge
명령을 사용해 원격 브랜치와 현재 브랜치를 합쳐주는 것을 git pull
명령으로 한꺼번에 할 수 있음.
fetch
로 가져온 브랜치 한 번에 병합하기① 페치한 뒤 병합할 때 원격 main 브랜치
에 있는 커밋이라는 다음과 같이 병합함.
git merge origin/main
② 다른 브랜치에 있는 커밋이라면 다음과 같이 병합함.
git merge origin/브랜치이름
\
③ 하지만, 매번 브랜치 이름을 써야한다면 번거로움. 다음과 같이 명령하면 페치한 뒤 지역 저장소에 반영하지 않은 최신 커밋을 병합할 수 있음.
git merge FETCH_HEAD