[git] 헷갈리는 명령어 (rebase/merge, fetch/pull)

nbh·2025년 9월 27일

협업을 시작하고 나서야 깨달았다.

git은 단순한 '코드 백업 도구'가 아니구나!

여러 명이 동시에 같은 프로젝트를 수정하다 보면, 내가 알던 단순한 명령어로는 해결할 수 없는 복잡한 상황들이 계속 발생한다.
특히 다른 팀원이 먼저 push한 파일을 나 또한 push하려고 하면

"rejected"

라는 무서운 메시지가 뜨고, 원격 저장소의 변경사항을 어떻게 처리해야 할지 막막해진다.
이때 필요한 것이 바로 merge, rebase, fetch, pull 같은 명령어들이다.

1. 브랜치 통합의 두 가지 방법 - merge vs rebase

팀 프로젝트에서 각자의 브랜치에서 작업을 마치고 main 브랜치에 합치려고 할 때, 두 가지 선택지가 있다.

A. git merge - 두 히스토리를 그대로 보존하기

merge는 두 브랜치의 작업 내용을 하나로 합치면서, 각 브랜치의 커밋 히스토리를 모두 그대로 유지한다.
마치 두 개의 강물이 합쳐져서 하나의 큰 강이 되는 것과 같다.

git checkout main
git merge feature-branch

이렇게 하면 새로운 merge commit이 생성되면서 두 브랜치의 작업이 하나로 합쳐진다. 커밋 히스토리를 보면 브랜치가 언제 갈라졌고 언제 합쳐졌는지 명확하게 볼 수 있다.

언제 사용할까?

  • 팀 프로젝트에서 feature 브랜치를 main에 통합할 때
  • 브랜치 작업의 맥락과 히스토리를 보존하고 싶을 때
  • 이미 공개된(push된) 브랜치를 다룰 때

히스토리가 모두 남아있고, 안전하다. 대신 커밋 히스토리가 복잡하다!

B. Git rebase - 깔끔한 일직선 히스토리 만들기

rebase는 한 브랜치의 커밋들을 다른 브랜치의 끝에 차례대로 재배치한다. 마치 퍼즐 조각을 다시 정렬하는 것처럼, 커밋들이 시간순으로 일직선상에 배치된다.

git checkout feature-branch
git rebase main

이렇게 하면 feature-branch의 커밋들이 main의 최신 커밋 뒤에 순서대로 붙게 된다. 결과적으로 히스토리가 매우 깔끔하고 직관적으로 보인다.

언제 사용할까?

  • 로컬에서 작업 중인 브랜치를 최신 main과 동기화할 때
  • 커밋 히스토리를 깔끔하게 정리하고 싶을 때
  • 아직 공개하지 않은(push하지 않은) 개인 브랜치에서

주의사항!!!
이미 push한 브랜치에서 rebase를 사용하면 다른 팀원들에게 문제가 될 수 있다....

-> 팀원분이 프로젝트에선 사용하지 않는게 좋다는 의견을 주셨다.
로컬 작업 브랜치에서만 사용 추천!

2. 원격 저장소 동기화 - fetch vs pull

push가 rejected되는 가장 대표적인 원인은, 내가 push하려 한 파일을 다른 사람이 이미 수정해 올렸을 때이다. 이를 피하려면 원격 저장소의 파일을 적절하게 가져와 반영하는데 필요한데, 이때 그 변경사항을 어떻게 가져올지 결정해야 한다.

A. git fetch - 일단 가져와서 확인부터

fetch는 원격 저장소의 최신 정보를 가져오되, 내 로컬 브랜치에는 바로 적용하지 않는 명령어다.

git fetch origin
git log origin/main  # 원격의 변경사항 확인
git diff main origin/main  # 차이점 비교

이렇게 하면 원격에서 무엇이 바뀌었는지 미리 확인한 후, 필요하다면 merge나 rebase로 직접 통합할 수 있다.

언제 사용할까?

  • 원격의 변경사항을 먼저 검토하고 싶을 때
  • 충돌이 예상되어 신중하게 접근하고 싶을 때
  • 여러 브랜치의 상태를 확인하고 싶을 때

B. git pull - 가져와서 바로 합치기

pull은 fetch와 merge(또는 rebase)를 한 번에 수행한다. 원격의 변경사항을 가져와서 현재 브랜치에 !!바로!! 적용한다.

git pull origin main  # fetch + merge
git pull --rebase origin main  # fetch + rebase

빠르고 간편하지만, 예상치 못한 충돌이나 문제가 발생할 수 있다.

언제 사용할까?

  • 원격의 변경사항을 즉시 반영해야 할 때
  • 팀원들의 작업을 신뢰할 수 있고 충돌 가능성이 낮을 때
  • 단순한 업데이트가 필요할 때

실전에서는 이렇게

처음 협업을 시작할 때는 이런 흐름으로 작업하는 것을 추천한다.

  1. 작업 시작 전: git fetch로 원격 상태 확인
  2. 개인 브랜치 작업 중: 주기적으로 git rebase main으로 최신 상태 유지
  3. 작업 완료 후: git merge로 안전하게 main에 통합

혹은, 팀 내에서 합의 후 한가지 방법을 정해서 사용하는게 좋다.

git을 잘 활용하면 혼자 작업할 때보다 오히려 더 체계적이고 안전하게 코드를 관리할 수 있다. 처음에는 복잡해 보이지만, 각 명령어의 목적을 이해하고 상황에 맞게 사용하다 보면 자연스럽게 익숙해진다. 힘내자!

0개의 댓글