

스쿼싱은 여러 커밋을 하나의 커밋으로 합치는 작업입니다. 이를 통해 커밋 히스토리를 정리하거나 커밋 메시지나 변경 사항을 수정할 수 있습니다.
새로운 기능 개발이나 버그 수정 과정에서, 최종 결과물에는 중요하지 않지만 히스토리를 어지럽힐 수 있는 잦은 작은 커밋들이 발생할 수 있습니다. 예를 들어, 오타 수정이나 작은 코드 리팩토링 같은 커밋이 이에 해당합니다.
풀 리퀘스트나 코드 리뷰 전에 관련 변경 사항을 하나의 커밋으로 묶어 리뷰어가 변경 내용을 더 쉽게 이해할 수 있도록 합니다.
여러 개발자가 관여하는 대규모 기능 개발에서는 많은 개별 커밋이 생성되기 마련입니다. 이를 의미 있는 단위로 묶으면 프로젝트 히스토리를 추적하기 더 쉬워집니다.
히스토리 간소화
여러 커밋을 하나로 합쳐 Git 히스토리를 깔끔하게 정리하고, 변경 내용을 한눈에 파악할 수 있습니다.
코드 리뷰 효율화
작은 커밋들을 묶어 변경 사항을 쉽게 이해할 수 있도록 하여, 리뷰어가 더 효율적으로 검토할 수 있습니다.
유지 보수성 향상
관련 변경 사항이 단일 커밋에 모이면, 향후 변경 내용을 이해하거나 되돌리기 쉬워집니다.

스쿼시라는 단어는 "짓누르다"는 뜻의 영어 동사 "squash"에서 유래되었습니다. 이는 호박이나 애호박 같은 채소를 눌러 으깨는 행위를 가리킵니다. Git에서 스쿼시 작업은 여러 커밋을 하나의 커밋으로 압축하는 모습이 이러한 동작과 유사하기 때문에 이러한 이름이 붙은 것으로 보입니다.
또한, 스쿼시는 "압축하다" 또는 "통합하다"는 의미로도 사용되며, 이 뜻도 Git 스쿼시 작업과 연관이 있습니다. Git 스쿼시는 영어로 "squash merge" 또는 "squash commit"이라고도 불립니다.
스쿼싱은 Git의 강력한 기능으로, 여러 커밋을 하나의 커밋으로 합치는 작업입니다. 이 과정에서 여러 변경 사항이 포함된 커밋들을 하나의 새로운 커밋으로 "압축"하여, 히스토리에서 변경 사항을 단일 커밋으로 기록합니다. 결과적으로 Git 커밋 히스토리가 더 깔끔하고 이해하기 쉬워집니다.
스쿼시는 다음과 같은 상황에서 특히 유용합니다:
커밋 정리
개발 중 발생하는 작은 수정이나 임시 변경 사항을 하나로 통합하여 히스토리를 정돈하고 싶을 때.
코드 리뷰 준비
풀 리퀘스트 작성 시, 관련된 커밋들을 하나로 묶어 리뷰어가 이해하기 쉽게 만들고 싶을 때.
기능 전체 구현 보기
특정 기능이나 버그 수정이 완료되었을 때, 관련된 모든 커밋을 하나로 통합하여 전체 구현 내용을 명확히 하고 싶을 때.
히스토리 정리
Git 히스토리가 더 깔끔해지고 특정 변경 사항을 추적하기 쉬워집니다. 이는 프로젝트 진행 상황을 이해하는 데도 도움이 됩니다.
정보 통합
관련된 변경 사항을 단일 커밋으로 그룹화하여 리뷰와 유지 보수가 용이해집니다.
커밋 메시지 명확화
여러 커밋을 병합하면 커밋 메시지가 더 의미 있어지고 프로젝트 히스토리가 더 명확하게 기록됩니다.
스쿼시 작업은 Git의 rebase 기능을 사용하여 수행됩니다. 기본적인 단계를 소개합니다:
스쿼시할 커밋의 범위를 먼저 정합니다.
git rebase -i HEAD~[N]
여기서 [N]은 통합하고자 하는 커밋의 개수입니다.
이 명령은 리베이스할 커밋 목록이 포함된 텍스트 편집기를 엽니다.
pick commit_hash_1
squash commit_hash_2
squash commit_hash_3
첫 번째 커밋은 그대로 두고 이후 커밋은 squash로 변경하여 수정된 커밋들을 하나로 병합합니다.
pick commit_hash_1
squash commit_hash_2
squash commit_hash_3
모든 커밋을 squash로 변경한 후, 새로운 커밋 메시지를 입력하며 불필요한 메시지는 삭제하거나 주석 처리합니다.
예:
pick commit_hash_1
squash commit_hash_2
squash commit_hash_3
새 메시지:
# 新機能の完全な実装
새 커밋 메시지를 저장하고 리베이스를 완료합니다.
git rebase --continue
다음과 같은 커밋이 있다고 가정합니다:
이들을 하나의 커밋으로 병합하려면 다음을 수행합니다:
리베이스 시작:
git rebase -i HEAD~3
편집:
pick commit_hash_1
squash commit_hash_2
squash commit_hash_3
새 메시지 입력:
# 新機能の完全な実装
리베이스 완료:
git rebase --continue
스쿼시는 히스토리를 변경하는 작업이므로 중요한 정보를 잃지 않도록 주의해야 합니다. 실험적인 변경은 새 브랜치에서 시도하는 것을 권장합니다.
다른 개발자와 공유하는 브랜치를 스쿼시할 경우, 작업에 영향을 미칠 수 있으므로 팀과 사전에 확인하는 것이 중요합니다.
스쿼시 후 원격에 반영

It's fun to play Webfishing, an online fishing game that mixes strategy, timing, and a little luck to make for a relaxing but difficult experience.