최근 작업하면서 Reviewer로 부터 Squash and merge로 머지해달라는 요청을 받아서 처음 해보았고, 존재도 처음 알게 되었습니다.
환경 설정을 위해 간단한 기능을 수정했고, 평소처럼 새로운 브랜치를 만들어 PR을 올렸습니다.
그동안은 별생각 없이 PR 페이지의 Merge pull request 큰 버튼만 눌렀는데, 이번엔 Reviewer가 squash로 머지해달라고 말씀을 해주셨어요.
알고 보니 Merge 버튼 옆 작은 역삼각형 아이콘을 누르면 다른 방식의 머지 옵션들이 있었고, 그중 기본값이 Create a merge commit으로 설정되어 있어서 매번 그 방식으로 머지하고 있었던 것!

PR 안의 모든 커밋을 하나로 합쳐서 메인 브랜치에 머지하라는 뜻
1. 히스토리를 깔끔하게 유지하려고
기능 하나를 여러 번의 커밋으로 나누어서 하기도 하는데, 예를 들면
feat: 기능 초안
fix: 오타 수정
refactor: 변수명 변경
fix: 스타일 깨짐 수정이런 내역이 그대로 merge되면, main 브랜치가 이런 자잘한 커밋으로 지저분 해지기도 하는데, 이때 Squash and merge를 하면, 아래와 같이 히스토리가 하나로 정리되어요.
feat: 로그인 기능 추가2. 리뷰/PR 단위로 히스토리를 관리하기 위해
‘PR 하나 = 기능 하나’의 단위로 관리하니까 PR 하나당 커밋 하나가 되면 나중에 기능별로 찾기도 쉬움!

기본 Merge (Merge pull request 버튼)를 했다면
A, B, C는 개별 커밋으로 남고
그 위에 자동으로 만들어지는 merge 커밋(Merge pull request #...)이 히스토리에 추가됨
브랜치 그래프가 **병합(branch)**된 형태
commit A
commit B
commit C
Merge pull request #12 from feature/loginSquash and merge를 한다면
기존의 A, B, C는 사라지고
대신 PR 전체 내용을 하나로 정리한 커밋만 남음
히스토리가 **직선형(linear)**으로 유지돼서 깔끔함
commit D ← 하나의 커밋만 생김 (PR 내용 전체 요약)