ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] pull과 fetch의 차이는 무엇일까?
    Github/Git 2020. 11. 19. 13:58
    728x90
    반응형

    pull과 fetch의 차이는 무엇일까?

    git pull: git remote 명령을 통해 서로 연결된 원격 저장소의 최신 내용을 로컬 저장소로 가져오면서 병합한다.  git push의 반대 성격이라 생각하면 된다.
    git fetch: 로컬 저장소와 원격 저장소의 변경 사항이 다를 때 이를 비교 대조하고 git merge 명령어와 함께 최신 데이터를 반영하거나 충돌 문제 등을 해결한다. 

    일반적으로 브랜치를 만들지 않고 혼자서만 작업하면서  Git과 Github를 사용한다면 pull과 fetch를 사용할 일이 거의 없을 것이다.

    하지만 대체적으로 Git을 사용할 때는 같이 협업하는 사람과 같이 사용할 것이다. 

     

    협업을 하다 보면 내가 로컬에서 작업하고 있을 때, 같은 팀원이 원격 저장소에 먼저 변경 사항을 커밋하고 push를 하게 되는 상황은 반드시 있을 것이다. 그러면 원격 저장소의 업데이트된 내용이 나의 로컬저장소에는 최신화가 되어있지 않기 때문에 이럴 때 pull과 fetch를 사용하면 된다.

     

     

    1. git fetch란?

    페치(fetch)는 원격 저장소의 커밋들을 로컬 저장소로 가져온다. 그리고 자동으로 병합(Merge)를 해주지 않기 때문에 본인이 직접 확인을 한 후에 병합(Merge)하는 과정을 거쳐야한다. 

     

     

     

    2. git pull이란?

    git pull이란 원격 저장소의 정보를 가져오면서 자동으로 로컬 브랜치에 병합(Merge)까지 수행해주는 명령어이다. 

     

    하지만 pull을 이용해서 원격 저장소의 커밋을 가져오게 되면 자동으로 병합되기 때문에 어떤 내용이 병합되면서 바뀌는지 알기가 힘들다는 단점이 있지만 필자는 주로 pull 명령어를 사용하기 때문에 이번 글에서 pull을 이용해서 실습을 진행해보려 한다.

     

    출처: https://support.nesi.org.nz/hc/en-gb/articles/360001508515-Git-Reference-Sheet

     

     

     

    실습해보기

    먼저 Git Kraken을 이용할 것이고, 실습하고자 할 레포지토리를 열어보자. 

    위와 같이 필자가 실습하려는 레포지토리는 브랜치를 만들어 관리했던 것이 아니라 master브랜치에서만 작업을 해왔기 때문에 위와 같은 상황이다.

     

    여기서 다른 사람이 나의 레포지토리에 커밋을 한 상황을 만들기 위해서 Github에서 Repository에 README.md 파일을 간단히 수정하고 커밋을 해보겠다. 

     

    위와 같이 연필 버튼을 눌러보자.

     

    그리고 간단히 수정을 한 후에 Commit changes 버튼을 눌러서 변경사항을 반영해보자. 

     

    그러면 현재의 상황은 원격 레포지토리에는 업데이트가 되었지만 나의 로컬에는 최신화된 원격저장소의 내용이 반영이 되어있지 않은 상황이다.

     

    Git Kraken에서는 어떻게 보여지는지 확인해보자.

    그러면 위와 같이 원격저장소로컬저장소가 차이가 생긴것을 볼 수 있다. 

     

     

    그러면 이러한 상황에서 로컬 저장소의 변경 내용을 push하면 가능할까?

    git add .
    git status
    git commit -m "커밋메세지"
    git push origin master

    위의 순서대로 명령어를 통해 로컬 저장소의 내용을 원격 저장소에 반영해보자.

     

    그러면 push를 하기 전에 pull을 하라는 거절 메세지를 볼 수 있다. 

     

     

    push 하기전에 pull하라는 이유가 무엇일까?

    지금까지 잘 이해하면서 글을 읽어왔다면 바로 맞출 수 있을 것이다. 원격 저장소의 README.md를 수정했는데 그 수정사항이 나의 로컬 저장소에 반영이 되지 않았기 때문에 pull을 통해 원격 저장소와 로컬 저장소를 동기화 시킨 후에 push를 해야한다.

    git pull origin master

     

    위의 명령어를 치면 아래와 같은 화면을 볼 수 있다. 

    위에서 말했던 것처럼 pull을 원격 저장소의 내용을 로컬 저장소로 가져오면서 자동으로 병합(Merge)를 해주기 때문이다. 

     

    그리고 다시 git pull origin master를 치면 위와 같이 원격 저장소의 내용이 로컬 저장소에 최신화된 것을 확인할 수 있다.  +는 추가된 코드, -는 삭제된 코드라고 생각하면 된다.

     

    그리고 위와 같이 Git Kraken에서 다시 확인해보면 로컬 저장소와 원격 저장소가 잘 합쳐진 것도 볼 수 있다. 

    반응형

    댓글

Designed by Tistory.