14: 리모트 저장소 데이터 가져오기(git fetch)

1 분 소요

이전까지의 작업은 거의 local에서 진행되었다고 볼 수 있습니다. 이제 다른 사람들과 협업을 하기 위해서는 리모트 저장소를 활용해야 합니다. 이때, 발생할 수 있는 상황 한 가지를 살펴보도록 하겠습니다.

상황 요약

요약해드리면 철수와 영희가 프로젝트를 진행하기 위해 origin이라는 리모트 저장소를 clone했습니다. 철수와 영희는 각자의 로컬 저장소에서 작업을 마친 후 commit을 하였습니다. 이때, 두 사람의 커밋 히스토리가 달라졌기 때문에 리모트 저장소에 push할 때 에러가 발생하고 말았습니다. 이를 해결하기 위해 git fetch 명령어를 사용해 로컬 저장소의 내용을 업데이트 해야합니다.

로컬 저장소, 리모트 저장소, clone에 대해 헷갈리시다면 ‘09: 리모트 저장소(git remote)‘의 내용을 다시 한 번 보고 오시기 바랍니다.

자세한 설명

철수와 영희가 origin이라는 리모트 저장소를 이용하여 프로젝트를 진행하고 있다고 가정합시다. 리모트 저장소 origin의 커밋 히스토리는 다음과 같습니다:

또한 철수와 영희가 git clone을 하여 각각의 로컬 저장소에 다음과 같이 저장했습니다:

이후 철수가 두 개의 커밋을 만들어 push를 했습니다. 그럼 원격 저장소와 각각의 저장소는 다음과 같은 모습일 것입니다:

  • 리모트 저장소

  • 로컬 저장소

이때, 영희도 자신의 작업을 마쳐 두 개의 커밋을 만들었습니다. 그럼 로컬 저장소의 커밋 히스토리와 리모트 저장소의 커밋 히스토리가 달라지게 됩니다. 또한, 영희의 커밋 히스토리와 철수의 커밋 히스토리도 달라지게 됩니다:

  • 로컬 저장소

이때 영희가 push를 하려한다면 다음과 비슷한 에러가 발생할 것입니다.

그 이유는 리모트 저장소의 커밋 히스토리와 영희의 커밋 히스토리가 다르기 때문입니다. 따라서 리모트 저장소에서 데이터를 받아와 로컬 저장소를 업데이트 해주어야 합니다. 이를 git fetch <remote> 명령어를 이용하여 할 수 있습니다. 영희는 다음과 같은 명령어를 사용합니다:

$ git fetch origin

이후 영희의 로컬 히스토리는 다음과 같이 업데이트 됩니다:

이후 앞에서 배운 것처럼 git merge 등으로 합친 후 push 해주면 됩니다. 위 그림의 origin/master의 정체는 다음 장에서 배우도록 하겠습니다.

댓글남기기