본문 바로가기
개발 도구/Git

Remote Repository 내용을 merge하지 않고 가져오기(git fetch)

by ♥︎해이나♥︎ 2022. 11. 30.
반응형

git pull은 리모트 레포지토리 내의 해당 브랜치가 가리키고 있는 모든 커밋을 로컬 레포지토리로 가져와서 머지를 하는 명령어이다.

그런데 간혹 아래와 같은 상황이 발생할 수 있다. 

  • 리모트 레토지토리의 브랜치 내용을 머지하기 전, 점검해야 할 필요가 있다. 
  • 리모트 레포지토리의 브랜치 내용과 로컬 레포지토리에서 직접 작성한 코드를 비교해서 오류가 없는지 검토해야 한다.

그럴 때 리모트 레포지토리에 있는 내용을 무조건 머지하는 것이 아니라, 일단 가져와서 내용을 살펴보고 머지를 할 수 있는 명령어가 있다.

 

 

아래 명령어를 사용하면 된다.

 

git fetch

 

fetch는 우리말로 '가져오다'라는 의미를 가지고 있다. 

 

구글 번역기 fetch 검색 결과

 

이 명령어를 사용하면 머지를 하지는 않고, 리모트 레포지토리에 있는 내용을 가져오기만 한다. 예시를 통해서 한 번 더 제대로 이해하고 넘어가는 것이 좋을 듯 하다.

 

 

Github에서 누군가(?)가 calculator.py 파일을 수정했다.

 

 

계산기 코드가 들어있는 파일인데 아래에 계산기와 전혀 관계가 없는 say_hello 코드를 실수로 추가한 것이다.

 

 

그리고 커밋까지 모두 마친 상태가 되었다. 다시 로컬 레포지토리로 돌아와서... 터미널 상황...

 

 

git fetch를 사용하면 리모트 레포지토리 origin/premium 브랜치에 있는 내용이 로컬 레포지토리로 이동한다. 머지는 하지 않은 상태이므로 이제 두 커밋의 차이를 비교해 보기로 한다. 이럴 때에는 두 커밋의 차이를 확인할 수 있는 명령어인 git diff를 사용한다. 이 명령어는 커밋 간의 차이 뿐만 아니라 브랜치 같의 차이를 확인할 때에도 사용할 수 있다. (매우 유용!)

 

git diff 브랜치1 브랜치2

 

만약 기억이 나지 않는다면 예전에 작성했던 아래 포스팅을 참고하면 도움이 될 것이다. (링크 클릭) 

2022.10.25 - [개발자 꿈나무/Git] - 두 커밋 사이의 차이점 비교하기(git diff)

 

두 커밋 사이의 차이점 비교하기(git diff)

이번 포스팅에서는 두 개의 커밋 사이에 내용이 어떻게 바뀌었는지, 그 차이점을 비교해보는 방법에 대해서 설명하려고 한다. 먼저 지난 포스팅에서 aliasing했던 단축 커맨드(git history)를 사용하

heinafantasy.com

 

로컬 레포지토리에 있던 원래 브랜치와 깃허브에서 새로 가져온 브랜치와의 차이점을 비교해야 하기 때문에, git diff premium origin/premium 라는 명령어를 작성해서 아래와 같은 결과를 얻었다.

 

 

그리고 리모트 레포지토리에 say_hello 라는 해당 파일에는 전혀 쓸모없는(!) 코드가 들어있다는 사실을 발견했다. 이것을 해결하는 방법은 크게 두가지가 있다.

 

  • 해당 코드를 작성한 개발자에게 함수를 수정해달라고 요청하기
  • 직접 잘못된 부분을 해결하고 git push 하기

 

두번째 방법으로 해결해 보도록 하겠다. 내용을 확인했으니 이제 가져온 내용을 로컬 레포지토리의 브랜치에 머지한다. 아래와 같이 git merge origin/premium 명령어를 사용하여 머지를 완료했다.

 

 

그 다음 수정하고 싶은 파일인 calculator.py 파일을 연다.

 

 

그리고 해당 코드를 삭제한 후에 다시 파일을 저장했다.

 

 

그 이후 작업은 평소와 동일하다. git add 명령어를 사용해서 Staging Area로 옮겨 주고, 커밋 메세지와 함께 commit 하고, git push 명령어를 사용해서 깃허브에 업로드해주면 된다.

 

 

다시 깃허브로 이동해서 수정한 파일을 열어보니, 코드가 삭제된 버전으로 잘 바뀐 것을 확인할 수 있었다.

 


알고 있으면 유용한 GIT TIP

깃허브를 통해 협업을 하고 있는데 git push가 안되는 상황이 종종 발생할 것이다. 이것은 해당 브랜치에 다른 동료가 작업해둔 내용과 충돌이 발생한 경우가 대부분이다. 이럴 때 해결 방법은...?

 

  • git push 전에 git pull을 먼저 해 주어야 한다. (또는 오늘 포스팅한 git fetch)
  • 만약 git pull에서 컨플릭트가 발생했다면, 일반 컨플릭트가 발생했을 때와 동일하게 대처하면 된다. git pull은 리모트 레포지토리에 있는 내용을 나의 로컬 레포지토리로 가져와서 머지를 하는 개념이기 때문이다. 코드를 수정한 후에 다시 커밋해준다. 

 

즉, 요약하면... 브랜치 작업을 하기 전에 되도록이면 git pull을 먼저 하고 시작하자!

반응형

댓글