[Git] 원격 브랜치 정보 가져오기

선영·2022년 9월 19일
0

Git&Github

목록 보기
7/9
post-thumbnail

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 커밋을 원격 저장소로 올림. 푸시한 후 mainorigin/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/mainorigin/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


0개의 댓글