Menu
Coddy logo textTech

Git: 커밋 합치기(Squash)

마지막 업데이트

Squash는 여러 커밋을 하나로 합치는 것으로, "wip", "오타 수정", "이번엔 진짜 수정" 같은 지저분한 커밋들의 연속을 하나의 깔끔한 커밋으로 만듭니다. 보통 사용하는 도구는 인터랙티브 rebase - git rebase -i - 이며, 여기서 합칠 커밋을 표시합니다. squash는 히스토리를 다시 쓰므로 push 전이나 나 혼자 작업하는 브랜치에서 하세요.

이 명령들을 터미널 플레이그라운드에서 사용해 보세요 - 브라우저 안의 진짜 셸이라 설치할 것이 없습니다.

스쿼시는 잘게 쪼개진 커밋들을 인터랙티브 리베이스로 하나의 깔끔한 커밋으로 접습니다.

문법

CommandWhat it does
git rebase -i HEAD~3최근 3개 커밋을 인터랙티브하게 rebase
git rebase -i mainmain 이후의 모든 커밋을 rebase
git merge --squash feature머지 시 브랜치의 커밋들을 하나로 합침
git reset --soft HEAD~3 && git commitrebase 없이 최근 3개 커밋을 합침

인터랙티브 rebase 명령

열린 에디터에서 pick을 다음 중 하나로 바꾸세요.

KeywordWhat it does
pick커밋을 그대로 유지
squash (s)이전 커밋에 합치고 메시지를 병합
fixup (f)합치되 이 커밋의 메시지는 버림
reword (r)커밋은 유지하되 메시지를 편집

실전 예제

push 하기 전에 최근 세 개의 커밋을 하나로 합칩니다.

StepActionResult
1git rebase -i HEAD~3최근 3개 커밋을 에디터에서 엽니다
22번과 3번 커밋을 squash로 설정첫 번째 커밋에 합치도록 표시합니다
3저장하고 합쳐진 메시지를 편집세 개의 커밋이 하나의 깔끔한 커밋이 됩니다

Git 커밋 합치기(squash) 자주 묻는 질문

Git에서 최근 N개의 커밋을 어떻게 합치나요?
git rebase -i HEAD~N을 실행합니다(예: 최근 세 개는 HEAD~3). 에디터에서 첫 번째 커밋은 pick으로 두고 나머지는 squash로 바꿉니다(메시지를 버리려면 fixup). 저장한 뒤 합쳐진 커밋 메시지를 편집하면 커밋들이 하나로 합쳐집니다.
squash와 fixup의 차이는 무엇인가요?
둘 다 커밋을 이전 커밋에 합칩니다. squash는 커밋의 메시지를 유지하고 에디터에서 다른 메시지와 결합할 수 있게 합니다. fixup은 커밋의 메시지를 완전히 버리고 앞선 커밋의 메시지만 남깁니다 - 최종 메시지에 넣고 싶지 않은 "앗, 작은 수정" 커밋에 유용합니다.
머지할 때 브랜치 전체를 어떻게 합치나요?
git merge --squash feature를 사용한 뒤 git commit을 하세요. 이렇게 하면 브랜치의 모든 변경 사항이 스테이징된 변경으로 적용되고, 브랜치의 개별 커밋을 가져오지 않고 대상 브랜치에 하나의 커밋으로 기록할 수 있습니다. GitHub의 "Squash and merge" 버튼도 같은 일을 합니다.
인터랙티브 rebase 없이 합칠 수 있나요?
네. git reset --soft HEAD~N은 브랜치를 N개 커밋 뒤로 되돌리면서 그 변경 사항을 모두 스테이징된 상태로 유지하고, 이어서 한 번의 git commit으로 하나로 기록합니다. rebase 에디터를 열지 않고 가장 최근 커밋들을 빠르게 합치는 방법입니다.
온라인에서 연습할 수 있나요?
네. 터미널 플레이그라운드를 열면 브라우저 안의 진짜 셸에서 인터랙티브 rebase를 실행할 수 있습니다 - 설치할 것이 없습니다. Coddy의 무료 인터랙티브 Git 강의도 rebase와 히스토리 정리를 단계별로 다룹니다.
Coddy programming languages illustration

Coddy로 Git 배우기

시작하기