Skip to content

push · pull · fetch ​

git push와 git pull의 역할 ​

  • git push : 로컬 레포지토리의 브랜치 내용을 리모트(원격) 레포지토리로 보내는 명령어
  • git pull : 리모트 레포지토리의 브랜치 내용을 내 로컬 레포지토리로 가져와서 Merge하는 명령어

  1. 동시 작업으로 인한 충돌 상황
    • 여러 개발자가 같은 리모트 브랜치에서 작업하면, 다른 개발자가 내용을 업데이트할 수 있어요.
    • 자신이 작업하고 push하기 전에, 리모트에서 먼저 수정된 내용이 있으면 바로 push할 수 없어요. 이때 오류가 발생해요.
  2. 해결 방법
    • 이럴 때는 반드시 git pull을 먼저 해서, 리모트에 있던 최신 내용을 내 로컬 브랜치로 가져오고, 자동으로 머지(merge)를 하게 돼요.
    • 만약 수정 내용이 겹치면, merge conflict(충돌)이 발생해요. 이때는 파일을 열어서 충돌 부분을 원하는 대로 수정하고, 저장한 뒤 git add .와 커밋을 다시 해주면 돼요.
  3. 정상적인 push까지 흐름
    • 충돌 해결 및 커밋까지 완료하면, 이제 git push를 하면 리모트 레포지토리에 내 변경사항이 정상적으로 업로드돼요.
  4. 핵심 정리
    • 협업하다 보면 git push 전에 git pull을 자주 해야 해요.
    • git pull은 리모트 브랜치를 내 브랜치에 merge하는 작업이에요.
    • 충돌이 나면 침착하게 conflict를 해결하고, 커밋한 뒤 push하면 돼요.

git fetch 커맨드 ​

  • git pull
    • 리모트 레포지토리의 branch를 가져와서 내 로컬 branch에 자동으로 merge까지 해줍니다.
    • 바로 합치고 싶을 때 편하게 사용할 수 있어요.
  • git fetch
    • 리모트 레포지토리의 branch 커밋들을 가져오기만 하고, 자동으로 merge하지는 않아요.
    • 가져온 후에 merge할지 말지를 직접 결정할 수 있습니다.
    • merge하기 전에 내용이 어떤지 검토하거나, 비교해보고 싶을 때 사용해요.
  • 차이점
    • git pull: fetch + merge를 한 번에 해줌
    • git fetch: 가져오기만 하고 merge는 직접
  • 실전 예시
    • 다른 개발자가 잘못된 코드를 push한 경우, git pull을 바로 하면 잘못된 코드가 내 코드에 바로 합쳐질 수 있음.
    • 그래서 git fetch로 먼저 코드만 가져와서 git diff 명령어로 로컬 branch와 리모트 branch의 차이점을 비교해 볼 수 있음.
    • 문제가 발견되면, 직접 수정해서 push하거나, 해당 개발자에게 고치게 요청할 수도 있음.
  • 정리
    • 바로 합쳐도 괜찮으면 git pull
    • 한 번 검토하고 싶으면 git fetch + git diff

정리 ​

명령어하는 일
git push로컬 브랜치 내용을 리모트로 보내기
git pull리모트 내용을 가져와서 자동으로 merge (fetch + merge)
git fetch가져오기만 하고 merge는 직접 결정 (git diff로 검토 후)
  • 리모트가 더 최신이면 push가 거절되므로, push 전에 pull부터

참고: 개인 Notion 학습 노트 (Git 공부)