
일반적인 병합 방법, 커밋 이력을 모두 남긴다.

my-branch가 main 으로 부터 분기된 이후
main 브랜치에서도 새로운 커밋이 생기고, my-branch 커밋들을 가져 오려면
새로운 merge 커밋을 생성하게 된다.
그래프 형식으로 관리 히스토리가 관리되며, 충돌 발생 시 원하는 지점으로 롤백이 가능하다.

my-branch가 main 으로 부터 분기된 이후
main 브랜치에 새로운 커밋이 없다면, my-branch 커밋들을 그대로 가져오게 된다.
머지하는 방식은 같다. 상황에 따라 1.1 과 1.2로 병합될 뿐이다.
$ git checkout main
$ git merge my-branch

squash는 여러개의 커밋을 하나의 커밋으로 합치는 것을 의미한다.
my-branch의 커밋들을 하나의 커밋으로 squash하여 main 브랜치에 merge하는 방식.
Sqush 머지는 보통 로컬에서 진행하여, 너무 잘게 나눠진 커밋들을 한데 모아
하나의 작업으로 머지하는데에 쓰인다.
장점 : 선형적인 커밋 히스토리를 관리할 수 있다.
단점 : my-branch에서의 커밋들이 하나로 합쳐지면서 커밋 이력이 사라지는 점
$ git checkout main
$ git merge --squash my-branch
$ git commit -m "squash & merge"

my-branch는 mian 브랜치의 A에서 분기 되었다 (my-branch의 base = A)
그 이후, my-branch는 독립적으로 진행하며 커밋들을 생성 했다.
Rebase는 base를 다시 설정한다는 의미
-> main 브랜치의 최신 커밋에 base를 설정하게 된다.
장점 : 선형적인 커밋 히스토리를 관리할 수 있다.
단점 : conflict 발생 시, 해결방법이 까다로울 수 있다.
$ git checkout my-branch
$ git rebase main
$ git checkout main
$ git merge my-branch