💡 Merge는 "내가 현재 있는 브랜치에 다른 브랜치를 합치는 것"이다.
git checkout feature/board git merge develop
"
develop
의 내용을feature/board
브랜치로 가져오겠다" 는 의미이다.
git checkout main
git merge develop
기능 개발이 끝난 후, develop 브랜치에 여러 기능이 모였다면
이제 그것을 배포용(main)에 합치는 것
즉, 이번 릴리스를 main에 반영하려고, develop의 모든 변경을 가져오는 것이다.
merge
는 "히스토리 그대로 보존",rebase
는 "히스토리 깔끔하게 정리"
✅ 시작 상황 (공통 전제)
A -- B -- C ← main \ D -- E ← feature
A, B, C
: main 브랜치 커밋D, E
: feature 브랜치 커밋
이제 feature
브랜치를 main
에 병합하고 싶다고 가정하자.
git merge (히스토리 보존, merge 커밋 생성)
git checkout main git merge feature
📈 결과 히스토리:
A -- B -- C ----------- G ← main \ / D -- E ----- ← feature (G: merge commit)
G
: merge 커밋 (자동 생성됨)- 브랜치 병합 흔적이 남고, 커밋 흐름이 비선형(트리 구조) 으로 보임
- 히스토리 보존, 충돌 시점 명확
git rebase (히스토리 정리, 깔끔하게 만들기)
git checkout feature git rebase main
📈 결과 히스토리:
A -- B -- C -- D' -- E' ← feature ↑ (replayed)
D', E'
: 기존D, E
를 새로 생성된 커밋으로 다시 쌓은 것 (커밋 ID 달라짐)- 이후 병합하면:
git checkout main git merge feature
결과:
A -- B -- C -- D' -- E' ← main, feature
✨ 선형 히스토리 완성!
더 깔끔하고 분석/리뷰가 쉬움
🔍 다이어그램 설명
🔁 Merge (병합)
D
, E
: feature 브랜치에서 작업한 커밋G
: main 브랜치에서 feature
를 병합하면서 생긴 merge 커밋🔀 Rebase
D'
, E'
: feature 브랜치의 커밋이 main 브랜치 끝에 다시 쌓인 것 (새 커밋처럼 생성됨)