카테고리 없음

[Github] 깃허브로 협업하기② 원격 브랜치 정보 가져오기

마크투비 2021. 11. 23. 10:52

깃허브로 협업하기


원격 브랜치 정보 가져오기

git pull 명령은 원격 저장소의 최신 커밋을 지역 저장소에 합쳐주는 역할을 한다. 이때 git pull을 하기 전에, 즉 최신 커밋을 합치기 전에 원격 저장소에 어떤 변화가 있는지 살펴보기 위해 원격 브랜치의 정보만 가져올 수 있다. 이전 포스트의 내용과 이어진다.

1. 원격 main 브랜치

지역 저장소의 main 브랜치처럼 원격 저장소도 default 브랜치가 main 브랜치로 생성된다. 

 

다음과 같이 git log 명령어를 이용해서 커밋 상태를 확인해보겠다. 

 

이전 포스트에서 가장 최신 커밋은 add d 메시지의 커밋이었다.

위 화면에서

HEAD->main은 이 커밋이 지역 저장소의 최종 커밋이라는 뜻이고,

origin/main은 원격 저장소의 최종 커밋이라는 뜻이다. 지금은 지역 저장소와 원격 저장소 모두의 최종 커밋이 동일하다.

 

아래와 같이 f3.txt 파일을 만들고 스테이징, 커밋까지 했다. git log 명령어를 이용해서 커밋 로그를 확인하면 다음과 같다. 

HEAD->main 지역 저장소의 최종 커밋의 커밋 메시지는 'create f3.txt'이고,

origin/main, origin/HEAD는 아직 'add a' 커밋을 가리키고 있다.

 

git push를 해서 원격 저장소에 커밋을 올리고 git log 명령을 실행하면 다음과 같다.

 

2. 원격 브랜치 정보 가져오기 - git fetch

git fetch 명령어를 이용해 원격 저장소의 정보를 가져온다. git pull은 원격 저장소의 커밋을 가져와서 무조건 지역 저장소와 합친다면, git fetch는 원격 브랜치에 어떤 변화가 있는지 확인하고 그 정보만 가져온다. 

 

이번엔 git_office 디렉터리로 이동한 후 git fetch를 실행해보겠다. ls-al 명령을 사용해서 어떤 파일이 있는지 살펴보면 다음과 같다. 위에서 푸쉬한 새로운 파일 f3.txt를 가져오지 않았다.

 

하지만 git log --oneline 명령을 사용해서 커밋 로그를 확인하면 다음과 같다. (HEAD->main)만 보이고 원격 저장소의 origin/main은 보이지 않는다. 원격 저장소의 최신 커밋 정보를 가져왔지만 아직 지역 저장소에 합치지 않아 기존의 git_office 에 있던 최신 커밋만 나타난다.

git status 명령으로 git pull을 사용해서 지역 저장소를 업데이트 할 수 있다는 내용을 확인할 수 있다.

 

fetch로 가져온 원격 저장소의 정보는 origin/main 브랜치가 아닌 FETCH_HEAD라는 브랜치로 가져와진다. 이 브랜치로 가져온 정보는 지역 저장소에 바로 반영되지 않는다. fetch해서 가져온 최신 커밋을 확인하고 싶다면 다음 명령어를 입력한다.

git checkout FETCH_HEAD
git log

 

FETCH_HEAD 브랜치에서 git log 명령을 사용하면 최신 커밋에 origin/main, origin/HEAD가 표시되어 있다. 즉 이 커밋이 fetch로 가져온 원격 브랜치의 최신 커밋이다. 이 내용을 보고 원격 브랜치의 최신 커밋을 지역 저장소에 합칠지 말지를 결정하면 된다!

 

fetch항 후에 최신 커밋을 현재 브랜치에 합치려면 git pull 명령을 사용해서 원격 저장소의 소스를 내려받을 수도 있고, git merge 명령으로 FETCH_HEAD에 있던 커밋을 병합할 수도 있다. 여기에서는 main 브랜치로 이동한 뒤 git merge 명령어를 사용해보겠다. 

git checkout main
git merge FETCH_HEAD

 

 

다음과 같이 git log 명령어를 사용하면 ㅚ신 커밋이 지역 저장소에 반영된 것을 확인할 수 있다.

 

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

 

3. 패치로 가져온 브랜치 한 번에 병합하기

패치한 뒤 병합할 때 원격 main 브랜치에 있는 커밋이라면 다음과 같이 병합한다.

git merge origin/main

 

다른 브랜치에 있는 커밋이라면 다음과 같이 병합한다.

git merge origin/브랜치 이름

 

매번 브랜치 이름을 써야하는 것이 번거롭다면 다음과 같이 명령어를 작성하면 fetch한 뒤 지역 저장소에 반영되지 않은 최신 커밋을 병합할 수 있다.

git merge FETCH_HEAD