미숑이의 블로그
블로그 홈소개

© 2025 Ryu Mi Sung. All rights reserved.

목차

들어가기 전에
상황
그래서 Squash and merge가 무엇인지
Squash and merge를 왜 쓰는지 (= 장점)
Squash and merge 하고 나니
기본 Merge와 Squash and merge 비교
기본 설정을 Squash and Merge으로도 가능
Git/GitHub

Squash and merge은 무엇인가

류미성
2025년 4월 5일

들어가기 전에

최근 작업하면서 Reviewer로 부터 Squash and merge로 머지해달라는 요청을 받아서 처음 해보았고, 존재도 처음 알게 되었습니다.


상황

환경 설정을 위해 간단한 기능을 수정했고, 평소처럼 새로운 브랜치를 만들어 PR을 올렸습니다.

그동안은 별생각 없이 PR 페이지의 Merge pull request 큰 버튼만 눌렀는데, 이번엔 Reviewer가 squash로 머지해달라고 말씀을 해주셨어요.

알고 보니 Merge 버튼 옆 작은 역삼각형 아이콘을 누르면 다른 방식의 머지 옵션들이 있었고, 그중 기본값이 Create a merge commit으로 설정되어 있어서 매번 그 방식으로 머지하고 있었던 것!

ef946643-d0c4-4bac-8e3f-72543e1ecaad.png

그래서 Squash and merge가 무엇인지

PR 안의 모든 커밋을 하나로 합쳐서 메인 브랜치에 머지하라는 뜻

Squash and merge를 왜 쓰는지 (= 장점)

1. 히스토리를 깔끔하게 유지하려고

기능 하나를 여러 번의 커밋으로 나누어서 하기도 하는데, 예를 들면

feat: 기능 초안
fix: 오타 수정
refactor: 변수명 변경
fix: 스타일 깨짐 수정

이런 내역이 그대로 merge되면, main 브랜치가 이런 자잘한 커밋으로 지저분 해지기도 하는데, 이때 Squash and merge를 하면, 아래와 같이 히스토리가 하나로 정리되어요.

feat: 로그인 기능 추가

2. 리뷰/PR 단위로 히스토리를 관리하기 위해

‘PR 하나 = 기능 하나’의 단위로 관리하니까 PR 하나당 커밋 하나가 되면 나중에 기능별로 찾기도 쉬움!

Squash and merge 하고 나니

9b47cc0e-ec97-456f-92a0-7371ea4445cd.png

기본 Merge와 Squash and merge 비교

  • 기본 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 내용 전체 요약)

기본 설정을 Squash and Merge으로도 가능

c25affac-6fba-4d11-9b31-376ba2e8d9b8.png