[Git] Fetch vs Pull, Merge vs Rebase

한동우·2025년 4월 1일

Git

목록 보기
1/1
post-thumbnail

1. Fetch vs Pull


git fetchgit pull 모두 원격 저장소에서 로컬 저장소로 변경사항을 가져오는 명령어지만, 다음과 같은 차이점이 있습니다.

1-1 Fetch

  • 원격 저장소에서 변경사항을 가져오지만 작업 중인 브랜치에 병합하지 않음
  • git diff 명령어로 변경사항 검토 후, 필요한 경우에 수동으로 병합할 수 있음

1-2 Pull

  • git fetchgit merge를 결합한 명령어
  • 원격 저장소에서 변경사항을 가져온 후, 작업 중인 브랜치에 해당 변경사항을 병합

1.3 비교

따라서 변경 내용을 먼저 확인한 뒤에 판단하고 싶을 때는 git fetch를,
변경 사항을 빠르게 반영하고 싶을 때는 git pull을 사용하는 것이 적절합니다.


2. Merge vs Rebase

git mergegit rebase 모두 한 브랜치의 변경사항을 다른 브랜치에 통합하는 명령어지만, 다음과 같은 차이점이 있습니다.

2-1 Merge

  • 브랜치를 병합하는 작업
  • 브랜치의 히스토리를 유지하면서 병합
  • 병합 이후 새로운 커밋(commit) 생성

2-2 Rebase

  • 사전 의미와 같이 base를 재설정
  • 기존 커밋(commit)이 재작성 되어 히스토리가 깔끔하게 정리됨

2-3 비교

다음과 같은 커밋 이력이 있다고 가정할 때

git merge main을 실행하면 다음과 같이 main 브랜치의 HEAD에 새로운 커밋 이력이 생깁니다.

그에 반해 Feature 브랜치에서 git rebase main을 실행하면 다음과 같이 main 브랜치를 기준으로 커밋 이력이 정렬되고 정렬된 커밋 이력은 새로운 해쉬 ID를 부여 받습니다.

git merge는 각 브랜치의 커밋 히스토리를 유지한 채 병합하여 새로운 커밋을 생성하고 git rebase는 현재 브랜치의 커밋들을 다른 브랜치 위에 다시 쌓는 방식으로 커밋 히스토리를 깔끔하게 정리할 수 있다는 차이점이 있습니다.

git merge는 협업 중인 여러 브랜치의 작업 내역을 명확히 보존하고자 할 때 적절하며, 충돌이 발생한 시점이나 작업 흐름을 추적하기에 유리합니다.

반면 git rebase는 개인 브랜치에서 작업한 내용을 메인 브랜치에 통합하기 전에 커밋 히스토리를 정리하거나, 병합 커밋 없이 일관된 히스토리를 유지하고자 할 때 유용합니다.


0개의 댓글