최근 작업하면서 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/login
Squash and merge를 한다면
기존의 A
, B
, C
는 사라지고
대신 PR 전체 내용을 하나로 정리한 커밋만 남음
히스토리가 **직선형(linear)**으로 유지돼서 깔끔함
commit D ← 하나의 커밋만 생김 (PR 내용 전체 요약)