Merge 방식에는 여러가지가 있다.
한 브랜치에서 다른 브랜치로 합치는 방법에는 Merge와 Rebase가 있다.

가장 먼저, Merge방식이다. Merge방식은 가장 많이 사용되는 병합이며 커밋 이력을 남길 때 사용한다. 그래서 커밋 히스토리가 지저분하다는 단점이 있다. Merge는 Fast-Forward방식과 Recursive방식으로 나뉜다.
기존 브랜치를 main, 새로운 브랜치를 develop라 표현하겠다. Fast-Forward Merge방식은 main에서 develop을 분기한 후, 새로운 커밋이 올라오지 않았을 때 develop의 변경 이력을 그대로 main으로 가져오는 것을 말한다. 그리고 Recursive Merge방식은 main에서 develop를 분기한 이후 main에 새로운 커밋이 생겼다면 develop은 최신이 아니다. 이 때 develop과 main을 공통 부모로 한 새로운 Merge commit을 생성하며, 이 방식을 Recursive Merge라 한다.
Squash & Merge는 여러 개의 커밋을 하나의 커밋으로 합치는 것을 말한다.
Rebase & Merge는, develop를 main에서 분기할 때의 커밋인 base를 다시 설정한다는 의미이다. base를 최신 main의 커밋으로 설정하는 것을 말한다.
feature → develop 머지
Squash & Merge가 유용하다. feature브랜치에서 기능을 개발하기 위한 지저분한 커밋 내용을 하나의 커밋으로 묶어 develop에 병합하면서, develop에는 기능 단위로 커밋이 추가되도록 정리할 수 있다. feature에서 작업을 완료한 후, feature를 제거한다는 점을 떠올려 보면, feature브랜치의 커밋 히스토리를 모두 develop에 연관지어 남길 필요가 없다.
develop → main 머지
Squash&Merge하게 되면 커밋 이력이 모두 사라져, 특정 기능에서 문제가 생겼을 때 롤백할 수 없게 된다. main 브랜치 또한 Merge Commit을 남길 필요가 없기에 Rebase & Merge가 적합하다.
hotfix → develop / hotfix → main
Merge 또는 Squash & Merge. 히스토리가 모두 남아야 하는 경우 Merge, 아닌 경우 Squash&Merge 추천