어제 오늘 내일

[Git] 지저분한 커밋 내역 하나로 합치기 (Squash 완벽 가이드) 본문

IT/Git

[Git] 지저분한 커밋 내역 하나로 합치기 (Squash 완벽 가이드)

hi.anna 2026. 3. 7. 01:04

개발을 하다 보면 "일단 저장(save)", "오타 수정", "버그 수정의 수정" 같은 자잘한 커밋들이 쌓이기 마련입니다. 혼자 볼 때는 괜찮지만, 나중에 Pull Request를 보내거나 동료가 내 코드를 볼 때 민망했던 적 있으시죠?

 

이번 포스팅에서는 여러 개의 지저분한 커밋을 깔끔하게 하나로 합치는 'Squash(스쿼시)' 기술을 소개합니다. 이 기능을 익히면 여러분의 Git history가 예술처럼 깔끔해질 것입니다.

 

 

커밋을 합치는 방법은 크게 두 가지가 있습니다.

  1. 정석적인 방법: Interactive Rebase 사용하기
  2. 쉬운 야매(?) 방법: Reset --soft 사용하기

가장 많이 사용되는 Rebase 방식부터 차근차근 알아보겠습니다.

 

 

방법 1. 정석대로 합치기 (git rebase -i)

가장 강력하고 세밀한 조정이 가능한 방법입니다. 최근 3개의 커밋을 하나로 합친다고 가정해 보겠습니다.

1단계: Rebase 모드 진입

터미널에 다음 명령어를 입력합니다. 숫자는 합치고 싶은 커밋의 개수입니다.

$ git rebase -i HEAD~3

2단계: 편집기에서 'pick'을 'squash'로 변경

명령어를 입력하면 편집기 창이 뜹니다. 보통 가장 위에 있는 것이 가장 오래된 커밋입니다.

pick 1a2b3c 첫 번째 커밋 (기준이 될 커밋)
pick 4d5e6f 두 번째 커밋 (합쳐질 커밋)
pick 7g8h9i 세 번째 커밋 (합쳐질 커밋)

여기서 가장 위에 있는 커밋은 pick으로 놔두고, 그 아래에 합치고 싶은 커밋들의 앞글자를 pick -> squash (또는 s)로 변경합니다.

pick 1a2b3c 첫 번째 커밋
s 4d5e6f 두 번째 커밋
s 7g8h9i 세 번째 커밋

해석: "밑에 있는 s 표시된 커밋들을 맨 위의 pick 커밋 안으로 꾹꾹 눌러 담겠다(Squash)!"

3단계: 통합 메시지 작성

저장하고 나오면, 합쳐진 커밋들의 메시지를 수정할 수 있는 새 창이 뜹니다.
불필요한 메시지는 지우고, 하나의 깔끔한 메시지로 정리한 뒤 저장하면 끝입니다!

 

 

방법 2. 더 쉽게 합치기 (git reset --soft)

rebase가 너무 복잡하고 무섭다면, 조금 더 직관적인 방법이 있습니다. "과거로 돌아가되, 작업물은 살려두는" 방식입니다.

1단계: 합치고 싶은 시점 직전으로 되돌아가기

3개의 커밋을 합치고 싶다면, 3단계 전으로 돌아갑니다.

$ git reset --soft HEAD~3

2단계: 다시 커밋하기

이제 3개의 커밋 내용은 모두 Staging Area에 모여 있습니다. 그냥 새로 커밋만 하면 됩니다.

$ git commit -m "깔끔하게 정리된 하나의 기능 구현"

결과: 기존 3개의 자잘한 커밋이 사라지고, 방금 만든 1개의 튼튼한 커밋으로 대체됩니다.

 

 

⚠️ 주의사항: 이미 Push 했다면?

지난 포스팅에서 reset 때 말씀드린 것과 원칙이 같습니다.

  • 나만 쓰는 로컬 브랜치라면: 마음껏 합치셔도 됩니다.
  • 이미 원격(GitHub 등)에 Push 했다면: 커밋을 합치면 Git history가 변경되므로, 협업 중인 동료들에게 큰 혼란을 줄 수 있습니다. (충돌 발생!)

Tip: 이미 Push 된 내역을 합쳐야 한다면, 팀원들과 충분히 상의한 후 push --force를 사용해야 합니다.

 

 

마치며

"좋은 코드는 좋은 커밋 메시지에서 시작된다"는 말이 있습니다.
개발 중간중간에는 편하게 커밋하고, 작업을 마친 후에는 오늘 배운 Squashhistory를 예쁘게 다듬어 보세요. 미래의 나, 그리고 동료들이 여러분을 "깔끔한 개발자"로 기억할 것입니다.

 

반응형
Comments