기록
git pull과 git merge 비교
als982001
2025. 1. 25. 15:11
1. 개요
작업을 하다 보면, 가끔씩 dev 등의 기준 브랜치(부모 브랜치)에 핫픽스 등으로 인해 변경점이 생기는 경우가 있다. 그래서 이를 내 작업 브랜치(자식 브랜치)에도 반영해야 하는 경우가 있다. 이럴 때 나는 보통 git merge를 이용하는데, 가끔씩 git merge와 git pull이 어떻게 다른지 헷갈리는 경우가 있다. 그래서 이런 경우를 위해 간단히 기록해보려고 한다.
2. git fetch
git fetch는 원격 저장소의 변경 사항을 로컬로 가져오는 명령어이다. 이 때, 로컬의 추적 브랜치가 업데이트된다.
- 변경 사항만을 가져오기에 로컬 브랜치와의 병합을 수행하지 않는다.
- 병합 전 변경 사항을 검토하거나 충돌 가능성을 확인할 때 유용
- 예를 들어, git fetch origin은 원격 저장소의 모든 변경 사항을 가져온다.
git fetch origin
3. git merge
git merge는 두 브랜치의 변경 사항을 하나로 통합하는 명령어로, 로컬 브랜치의 다른 브랜치의 변경점을 병합하여 작업을 이어나가는 것이 가능하다.
- 만약 자식 브랜치에도 커밋이 추가되는 등의 이유로 두 브랜치가 서로 다른 히스토리를 가질 경우, 병합 커밋(Merge Commit)이 생성되며, 병합 전후의 변경 기록이 유지된다.
- 충돌이 발생할 경우 직접 (수동으로) 해결하여 병합을 완료해야 한다.
- 협업 시 브랜치 간 작업을 통합할 때 주로 사용
- 예를 들어, git merge dev는 현재 체크아웃된 브랜치에 dev 브랜치의 변경 사항을 병합한다.
git merge dev
4. git pull
git pull은 git fetch와 git merge를 합한 명령어로, 원격 저장소에서 변경 사항을 가져온 후 이를 현재 브랜치에 자동으로 병합한다.
- 원격 브랜치와 로컬 브랜치를 빠르게 동기화할 수 있다.
- 병합 전 변경 사항을 확인하지 않기에 예상치 못한 충돌이 발생할 수도 있다.
- 간단한 동기화 작업이나 개인 프로젝트에 보다 적합하다.
- 예를 들어, git pull origin main은 원격 브랜치 main의 변경 사항을 가져와 현재 브랜치에 병합한다.
5. git pull과 git merge로 변경점 반영하는 방법
예를 들어, dev 브랜치에서 작업 브랜치(자식 브랜치)를 생성하였다. 이 때, dev 브랜치에서 변경 사항이 생겼다고 가정해보자. 즉, 작업 브랜치를 생성한 시점 이후에 추가 커밋이 dev 브랜치에 생긴 것이다. 그리고 나는 dev 브랜치의 변경점을 작업 브랜치로 반영(병합)하고 싶다. 이 때, git pull과 git merge를 이용할 수 있다.
5-1. git pull을 이용하는 방법
git checkout 작업브랜치
git pull origin dev
- 원격 dev 브랜치의 변경점을 작업 브랜치에 병합한다.
- 한 번의 명령어로 병합이 가능하지만, git merge에 비해 변경 내용을 사전에 확인하기 어렵다.
5-2. git fetch와 git merge를 이용하는 방법
git fetch origin dev
git checkout 작업브랜치
git merge dev
- git fetch로 원격 dev 브랜치의 변경점을 가져온 후, git merge로 병합을 수행한다.
- 병합 전 변경 사항을 확인할 수 있다.
6. 정리
git pull과 git merge에 대해 정리를 하자면 다음과 같다.
- git merge는 변경점을 병합하는 명령어
- git pull: git fetch + git merge
- 이상적인 경우라면 git pull과 git merge의 결과는 같음
- 하지만 git pull은 git merge에 비해 변경 내용을 확인하기 어려울 수 있음
- git pull을 사용해도 괜찮은 경우
- 병합이 간단하거나 병합 전 변경 사항을 확인하지 않아도 될 때 (예: 개인 프로젝트)
- git fetch + git merge가 더 나은 경우
- 팀 프로젝트처럼 병합 전 변경 사항을 확인해야 하는 경우
- 병합이 복잡하건, 충돌을 사전에 방지하고 싶은 경우