merge
방식:
- 기본 동작. 원격 브랜치의 커밋을 현재 로컬 브랜치에 병합
- 병합 커밋(Merge Commit)이 생성
- 병합의 히스토리를 명확하게 유지
특징:
- 원래의 커밋 히스토리를 그대로 유지
- 히스토리가 복잡하게 보일 수 있음
사용 예시:
git pull origin <branch-name> --merge
#기본동작이므로 옵션을 안달아도 된다.
git pull origin <branch-name>
적합한 상황:
- 히스토리의 병합 작업을 명확히 기록하고 싶을 때
- 협업 중 병합 커밋 기록을 통해 컨텍스트를 유지하고자 할 때
- 여러 사람이 동시에 작업하여 충돌 가능성이 높은 경우
깃로그
상황
- main 브랜치에서 로컬에서 작업을 진행하여 커밋 A, B 생성.
- 원격 main 브랜치에서 커밋 C가 추가됨.
- git pull --merge 실행.

rebase
방식:
- 원격 브랜치의 변경 사항을 현재 브랜치의 기준점으로 가져와, 로컬 브랜치의 변경 사항을 재배치
- 새로운 커밋 해시가 생성
특징:
- 히스토리가 직선형으로 정리되어 깔끔
- 원래의 커밋 해시가 변경되므로, 협업 중에는 주의가 필요.
사용 예시:
git pull origin <branch-name> --rebase
적합한 상황:
- 히스토리를 직선형으로 유지하고 싶을 때.
- 협업보다는 개인 작업 브랜치에서 사용하거나, 변경 사항이 단순할 때.
- 병합 커밋 없이 깔끔한 히스토리가 필요할 때.
깃로그
상황:
- 로컬 main 브랜치에서 커밋 A, B 생성.
- 원격 main 브랜치에서 커밋 C가 추가됨.
- git pull --rebase 실행.

비교 표
특징 | merge | rebase |
히스토리 구조 | 병합 커밋 포함, 분기점이 생김 | 직선형, 커밋이 재배치됨 |
병합 커밋 생성 여부 | 생성됨 | 생성되지 않음 |
원본 커밋 유지 | 원본 커밋 그대로 유지 | 원본 커밋 해시 변경 |
충돌 처리 방식 | 충돌 발생 시 병합 커밋 내에서 해결 | 충돌 발생 시 커밋마다 해결 |
적합한 상황 | 협업 중 기록을 명확히 남기고 싶을 때 | 히스토리를 깔끔히 유지하고 싶을 때 |
주의사항 | 히스토리가 복잡해질 수 있음 | 협업 중 사용 시, 재배치로 충돌 가능성 있음 |
명령어와 옵션 정리
git pull --merge
옵션 | 설명 | 예시 |
--commit | 병합 시 자동으로 병합 커밋 생성 (기본 동작) | git pull --merge --commit |
--no-commit | 병합 커밋을 생성하지 않고 병합된 상태로만 유지 | git pull --merge --no-commit |
--squash | 모든 변경 사항을 하나의 커밋으로 압축 | git pull --merge --squash |
--edit | 병합 커밋 메시지를 편집하도록 설정 | git pull --merge --edit |
git pull --rebase
옵션 | 설명 | 예시 |
--interactive | 인터랙티브 모드에서 재배치 커밋 조정 | git pull --rebase --interactive |
--autostash | Rebase 전에 로컬 변경 사항을 임시로 저장하고, Rebase 완료 후 복원 | git pull --rebase --autostash |
--preserve | 커밋 메타데이터 (e.g., 날짜, 작성자)를 보존 | git pull --rebase --preserve |
--no-autostash | 기본값. Rebase 시 임시 저장 없이 진행 | git pull --rebase --no-autostash |
결론
- merge: 협업 시 커밋 히스토리를 명확히 남기고 싶을 때 사용. 기본 동작이며 안전.
- rebase: 히스토리를 깔끔하게 유지하고 싶을 때 사용. 단, 협업 시 충돌 가능성 주의
댓글