1. Merge
- 기존 브랜치에서 분기된 새로운 브랜치를 병합하는 새로운 커밋(m)을 생성하여 머지된다.
2. Squash And Merge
- 기존 merge 방식과 유사하게 새로운 브랜치를 병합하는 새로운 커밋(abc)을 생성하여 머지된다.
- 머지 커밋의 부모 브랜치는 항상 하나이다.
-> main 브랜치에 분기된 브랜치 각각의 커밋 기록이 남지 않는다.
3. Rebase And Merge
- 분기된 브랜치의 베이스를 (현재 브랜치 위치로) 변경한다.
- 병합 커밋이 따로 생성되지 않는다.
- 새로운 브랜치와 커밋 메세지는 같지만, 실제 커밋 로그의 해쉬 값은 다르다.
-> 실제로는 다른 커밋이다.
- 기존 브랜치에 또 다른 변경 내용이 있을 경우 충돌이 난다.
- master에서 rebase를 하기 보단, 분기된 브랜치에서 master 브랜치를 rebase 하고 병합하는 것이 좋다.
- 작성한 커밋 하나 하나가 모두 main 브랜치에 보여야 한다면 rebase 방식을 추천
기존에는 커밋 기록을 깔끔하게 하고, 각 커밋을 볼 수 있도록 rebase and merge
방식을 사용했었다.
하지만, 하나의 기능 브랜치의 여러 커밋들은 큰 의미가 없다고 판단했다.
(PR에서 파생된 수정 커밋이기 때문에)
그래서 각 기능에 대한 커밋이 하나만 기록(병합 커밋)되는 squash and merge
방식으로 전환했다.
(git이 자동으로 해당 브랜치의 여러 커밋 메세지를 자동으로 하나로 통합하여 제공한다.)
참고 자료
[Git] Merge 이해하기 (Merge / Squash and Merge / Rebase and Merge)