로컬 저장소의 커밋과 원격 저장소의 커밋이 다를 때-git fetch, git pull

고민경·2024년 2월 9일

방학 때 git 협업을 진행했다. develop 브랜치를 기반으로 feat#{ } 브랜치를 생성해서 작업하는 방식이었다.
나는 develop 브랜치를 메인으로 하는 브랜치 feat#31을 생성해서 이 브랜치에 작업 중이었다. 팀원 중 한 분이 develop 브랜치에 pull request를 해서, 원격 저장소와 내 저장소의 커밋 내용이 달라지게 되었다. 그래서 원격 커밋 내용을 가져올 때 fetch와 pull 중 어느 명령어를 사용해야 하는지 고민이 됐다.
먼저 git pull, git fetch에 대해 알아보자!!

git pull

pull은 원격 서버에서 최신 커밋들을 내려받아서 현재 로컬 브랜치와 자동으로 병합한다.

git fetch

fetch는 원격저장소에서 거밋된 코드들을 임시 브랜치로 다 내려받는다.
(이 임시 브랜치는 .git 파일의 FETCH_HEAD에서 확인할 수 있다.
git checkout FETCH_HEAD로 체크아웃하고 git log --oneline 등으로 확인하기)
내려받은 후 현재 브랜치와 자동 병합하지 않고, 그렇기 때문에 워킹디렉토리도 변화가 없다. 그래서 merge 명령어를 이용해서 수동 병합해야 한다.

내가 선택한 방법

  1. git fetch origin
    먼저 이 명령어를 입력해서 로컬 저장소와 원격 저장소의 변경 사항을 비교 대조했다.
    origin을 적은 이유는 원격 저장소 이름이 origin이기 때문이다. (원격 저장소 확인 명령은 git remote)

  2. git pull origin develop
    fetch를 했을 때 충돌날 만한 요소는 없는 것 같아 pull을 실행했다. pull을 입력해서 원격 저장소의 develop 내용을 가져와 자동으로 feat#31(현재 내 브랜치)과 병합 작업을 실행한다.
    브랜치를 생성한 이후 feat#31 브랜치 내에서 파일을 생성하거나 수정했었는데 예상한 대로 충돌은 나지 않았다.


소스트리를 확인해봤을 때 브랜치가 머지된 것을 볼 수 있다.

0개의 댓글