여러 개발자들이 모여 협업하는 경우, 각자 branch에서 맡은 기능에 대한 개발을 진행하고 개발이 완료되면 main과 같은 base 브랜치에 merge한 후 하나가 된 base의 코드를 서버에 배포하는 과정을 거치게 됨
// merge할 브랜치로 전환
$ git checkout main
// git merge [브랜치명] : 현 브랜치(main)에 해당 브랜치(newbranch)의 내용 병합
$ git merge newbranch


| 경우 | base | main | newbranch | merge 결과 | |
|---|---|---|---|---|---|
| case1 | A | A | B | → | B |
| case2 | 1 | 2 | 1 | → | 2 |
| case3 | "hi" | (공백) | "hi" | → | (공백) |
| case4 | "bye" | "good" | "nice" | → | conflict 발생❗ |
Squash Merge는 병합할 브랜치의 모든 커밋을 하나의 커밋으로 Squash한 새로운 커밋을 base 브랜치에 추가하는 방식으로 병합$ git checkout main
$ git merge --squash newbranch
$ git commit -m "squash & merge"

feature → develop 브랜치간 머지
feature 브랜치에서 기능을 개발하기 위한 지저분한 커밋 내역을 하나의 커밋으로 묶어 develop 브랜치에 병합하면서, develop 브랜치에는 기능 단위로 커밋이 추가되도록 정리할 수 있음
// newbranch 브랜치로 전환
$ git checkout newbranch
// newbranch 브랜치를 main 브랜치 위로 rebase
// newbranch의 커밋들이 main 브랜치의 최신 커밋 위에 재배치
$ git rebase main
// 다시 main 브랜치로 전환
$ git checkout main
// main 브랜치에 newbranch 브랜치의 변경 사항을 병합
$ git merge newbranch

develop → main 브랜치간 머지
main 브랜치는 지금까지 작업한 모든 기능을 배포할 때 병합함