방학 때 git 협업을 진행했다. develop 브랜치를 기반으로 feat#{ } 브랜치를 생성해서 작업하는 방식이었다.
나는 develop 브랜치를 메인으로 하는 브랜치 feat#31을 생성해서 이 브랜치에 작업 중이었다. 팀원 중 한 분이 develop 브랜치에 pull request를 해서, 원격 저장소와 내 저장소의 커밋 내용이 달라지게 되었다. 그래서 원격 커밋 내용을 가져올 때 fetch와 pull 중 어느 명령어를 사용해야 하는지 고민이 됐다.
먼저 git pull, git fetch에 대해 알아보자!!
pull은 원격 서버에서 최신 커밋들을 내려받아서 현재 로컬 브랜치와 자동으로 병합한다.
fetch는 원격저장소에서 거밋된 코드들을 임시 브랜치로 다 내려받는다.
(이 임시 브랜치는 .git 파일의 FETCH_HEAD에서 확인할 수 있다.
git checkout FETCH_HEAD로 체크아웃하고 git log --oneline 등으로 확인하기)
내려받은 후 현재 브랜치와 자동 병합하지 않고, 그렇기 때문에 워킹디렉토리도 변화가 없다. 그래서 merge 명령어를 이용해서 수동 병합해야 한다.
git fetch origin
먼저 이 명령어를 입력해서 로컬 저장소와 원격 저장소의 변경 사항을 비교 대조했다.
origin을 적은 이유는 원격 저장소 이름이 origin이기 때문이다. (원격 저장소 확인 명령은 git remote)

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


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