Git에서 Rebase와 Merge는 브랜치를 병합하는 두 가지 방식인데, 각각 장단점이 있어요. 실무에서는 코드 히스토리를 관리하는 전략에 따라 다르게 사용됩니다.
1️⃣ Merge (git merge
)
✅ 기본적인 브랜치 병합 방식
✅ 새로운 Merge Commit이 생성됨
사용법
git checkout main
git merge feature-branch
예시
A---B---C (main)
\
D---E---F (feature-branch)
➡ git merge feature-branch
실행 후:
A---B---C---M (main)
\ /
D---E---F (feature-branch)
✅ M
(Merge Commit)이 생성됨.
✅ 과거 히스토리를 그대로 유지하며, 브랜치가 합쳐짐.
장점
✔️ 히스토리가 명확해져 변경 사항을 쉽게 추적 가능
✔️ 팀 협업에서 충돌이 발생해도 해결이 비교적 쉽고 안전
단점
❌ 불필요한 Merge Commit이 많아지면 히스토리가 지저분해짐
❌ git log
조회 시 브랜치가 분기되었다가 합쳐지는 흐름이 복잡해짐
2️⃣ Rebase (git rebase
)
✅ 커밋 히스토리를 깔끔하게 유지
✅ Merge Commit 없이 브랜치를 main 브랜치 뒤에 정렬
사용법
git checkout feature-branch
git rebase main
예시
A---B---C (main)
\
D---E---F (feature-branch)
➡ git rebase main
실행 후:
A---B---C---D'---E'---F' (feature-branch)
✅ feature-branch
의 커밋들이 main
브랜치 위로 다시 정렬됨.
✅ 마치 feature-branch
가 main
에서 바로 시작한 것처럼 히스토리가 깔끔해짐.
장점
✔️ git log
가 직선형으로 유지되어 히스토리가 깔끔
✔️ git blame
이 쉬워지고, 변경 사항 추적이 용이
단점
❌ 충돌이 발생하면 각 커밋마다 충돌을 해결해야 함
❌ 공유된 브랜치에서 Rebase 사용 시 팀원들과 충돌 가능
3️⃣ Merge vs Rebase 실무에서 어떻게 사용해야 할까?
main
브랜치에서feature
브랜치를 만들고 작업 →git rebase main
을 사용해 최신 상태로 유지- PR 머지 시 → Merge 전략을 선택
- 히스토리 보존이 필요하면
git merge
- 히스토리를 깔끔하게 유지하고 싶으면
git rebase main
후git merge --ff-only
- 히스토리 보존이 필요하면
4️⃣ 실무에서 안전한 Rebase & Merge 방법
- 브랜치 최신화 (
fetch & rebase
)
git fetch origin
git checkout feature-branch
git rebase origin/main # 최신 main 브랜치 반영
- 충돌 해결 후 커밋 (
fix conflict & continue
)
git status # 충돌 확인
# 충돌 파일 수정 후
git add .
git rebase --continue
- 머지하기 (
rebase 후 fast-forward merge
)
git checkout main
git merge --ff-only feature-branch # fast-forward 병합
- 로컬 정리 (
delete branch
)
git branch -d feature-branch # 로컬 브랜치 삭제
git push origin --delete feature-branch # 원격 브랜치 삭제
5️⃣ 정리
방식 | 특징 | 장점 | 단점 | 사용 추천 상황 |
---|---|---|---|---|
git merge |
브랜치를 병합하고 Merge Commit 생성 | 히스토리 보존, 충돌 해결 쉬움 | Merge Commit이 많아지면 지저분 | 팀 협업 시 안정적 |
git rebase |
브랜치를 최신 브랜치 위로 재배치 | 히스토리가 깔끔 | 충돌 발생 시 해결 번거로움 | 개인 브랜치 정리 시 추천 |
➡ 협업에서는 git merge
, 개인 작업에서는 git rebase
를 주로 사용하는 게 일반적이에요! 🚀
➡ 회사에서 어떤 Git 전략을 사용하는지 먼저 확인하고 적용하는 게 중요합니다. 💡
'TIL' 카테고리의 다른 글
[250225 TIL] Hasura란?(GPT질의) (0) | 2025.02.25 |
---|---|
[250225 TIL] n8n 이란?(GPT질의) (0) | 2025.02.25 |
[250221 TIL] Number.EPSILON (0) | 2025.02.21 |
[250216 TIL] XSS, SQL injection (0) | 2025.02.16 |
[250216 TIL] Duck Typing (0) | 2025.02.16 |