git을 이용해 여러 명이 협업을 할 때 자신이 branch를 만들어서 로컬에서 작업을 하고 main branch에 합치려고 할 때 merge를 사용한다.
즉, 하나의 브랜치와 다른 브랜치의 변경 이력 전체를 합치는 것이다.
a,b,c 커밋을 refer하는 m이 생성되고 m을 통하여 a+b+c의 내용이 main branch에 추가된다.
squash and merge는 a+b+c commit을 합쳐서 새로운 커밋 abc를 만들어 내고 main branch에 추가된다. 보통 feature branch의 커밋 이력을 합쳐서 깔끔하게 만들 때 주로 사용한다.
my-branch의 여러 개의 history가 하나로 합쳐져서 새로운 commit을 생성한다.
rebase and merge는 모든 커밋들이 합쳐지지 않고 각각 master branch에 추가된다.
일반 merge는 merge 커밋 이력이 추가로 남지만, rebase and merge는 branch로 merge할 때 merge 커밋 이력이 남지 않아서 한 branch에서 작업한 것처럼 보여진다.