Git 커밋 히스토리를 정리하려면 squash 를 사용하세요

Shadow Syntax·2024년 12월 30일
5
post-thumbnail

스쿼시(Squash) 사용의 목적과 이점

스쿼싱은 여러 커밋을 하나의 커밋으로 합치는 작업입니다. 이를 통해 커밋 히스토리를 정리하거나 커밋 메시지나 변경 사항을 수정할 수 있습니다.

예시 사용 시나리오

개발 중 잦은 수정

새로운 기능 개발이나 버그 수정 과정에서, 최종 결과물에는 중요하지 않지만 히스토리를 어지럽힐 수 있는 잦은 작은 커밋들이 발생할 수 있습니다. 예를 들어, 오타 수정이나 작은 코드 리팩토링 같은 커밋이 이에 해당합니다.

  • 예: "버튼 디자인 변경" 커밋과 "버튼 동작 변경" 커밋을 하나로 합쳐 깔끔한 히스토리를 만들고, 변경 사항을 한눈에 파악할 수 있도록 정리합니다.

코드 리뷰 준비

풀 리퀘스트나 코드 리뷰 전에 관련 변경 사항을 하나의 커밋으로 묶어 리뷰어가 변경 내용을 더 쉽게 이해할 수 있도록 합니다.

  • 예: 새로운 기능 "사용자 등록 추가"를 여러 작은 커밋으로 구현한 후, 코드 리뷰 전에 하나로 합치면 리뷰어가 변경 사항을 더 효율적으로 검토할 수 있습니다.

워크플로우 정리

여러 개발자가 관여하는 대규모 기능 개발에서는 많은 개별 커밋이 생성되기 마련입니다. 이를 의미 있는 단위로 묶으면 프로젝트 히스토리를 추적하기 더 쉬워집니다.

  • 예: "웹사이트 디자인 변경"과 같은 대규모 프로젝트에서 각 개발자의 변경 사항을 하나로 통합하면, 향후 변경 내용을 이해하거나 되돌리는 작업이 용이해집니다.

스쿼시 사용의 주요 이점

  1. 히스토리 간소화
    여러 커밋을 하나로 합쳐 Git 히스토리를 깔끔하게 정리하고, 변경 내용을 한눈에 파악할 수 있습니다.

  2. 코드 리뷰 효율화
    작은 커밋들을 묶어 변경 사항을 쉽게 이해할 수 있도록 하여, 리뷰어가 더 효율적으로 검토할 수 있습니다.

  3. 유지 보수성 향상
    관련 변경 사항이 단일 커밋에 모이면, 향후 변경 내용을 이해하거나 되돌리기 쉬워집니다.

스쿼시(Squash)라는 단어의 기원

스쿼시라는 단어는 "짓누르다"는 뜻의 영어 동사 "squash"에서 유래되었습니다. 이는 호박이나 애호박 같은 채소를 눌러 으깨는 행위를 가리킵니다. Git에서 스쿼시 작업은 여러 커밋을 하나의 커밋으로 압축하는 모습이 이러한 동작과 유사하기 때문에 이러한 이름이 붙은 것으로 보입니다.

또한, 스쿼시는 "압축하다" 또는 "통합하다"는 의미로도 사용되며, 이 뜻도 Git 스쿼시 작업과 연관이 있습니다. Git 스쿼시는 영어로 "squash merge" 또는 "squash commit"이라고도 불립니다.


Git에서 스쿼시란?

스쿼싱은 Git의 강력한 기능으로, 여러 커밋을 하나의 커밋으로 합치는 작업입니다. 이 과정에서 여러 변경 사항이 포함된 커밋들을 하나의 새로운 커밋으로 "압축"하여, 히스토리에서 변경 사항을 단일 커밋으로 기록합니다. 결과적으로 Git 커밋 히스토리가 더 깔끔하고 이해하기 쉬워집니다.


스쿼시를 사용하는 상황과 이유

스쿼시는 다음과 같은 상황에서 특히 유용합니다:

  1. 커밋 정리
    개발 중 발생하는 작은 수정이나 임시 변경 사항을 하나로 통합하여 히스토리를 정돈하고 싶을 때.

  2. 코드 리뷰 준비
    풀 리퀘스트 작성 시, 관련된 커밋들을 하나로 묶어 리뷰어가 이해하기 쉽게 만들고 싶을 때.

  3. 기능 전체 구현 보기
    특정 기능이나 버그 수정이 완료되었을 때, 관련된 모든 커밋을 하나로 통합하여 전체 구현 내용을 명확히 하고 싶을 때.


스쿼시가 커밋 히스토리에 미치는 영향

  1. 히스토리 정리
    Git 히스토리가 더 깔끔해지고 특정 변경 사항을 추적하기 쉬워집니다. 이는 프로젝트 진행 상황을 이해하는 데도 도움이 됩니다.

  2. 정보 통합
    관련된 변경 사항을 단일 커밋으로 그룹화하여 리뷰와 유지 보수가 용이해집니다.

  3. 커밋 메시지 명확화
    여러 커밋을 병합하면 커밋 메시지가 더 의미 있어지고 프로젝트 히스토리가 더 명확하게 기록됩니다.


스쿼시 실습 방법

단계별 가이드

스쿼시 작업은 Git의 rebase 기능을 사용하여 수행됩니다. 기본적인 단계를 소개합니다:

1. 리베이스 시작하기

스쿼시할 커밋의 범위를 먼저 정합니다.

git rebase -i HEAD~[N]

여기서 [N]은 통합하고자 하는 커밋의 개수입니다.

이 명령은 리베이스할 커밋 목록이 포함된 텍스트 편집기를 엽니다.

pick commit_hash_1  
squash commit_hash_2  
squash commit_hash_3  

2. 스쿼시 선택

첫 번째 커밋은 그대로 두고 이후 커밋은 squash로 변경하여 수정된 커밋들을 하나로 병합합니다.

pick commit_hash_1  
squash commit_hash_2  
squash commit_hash_3  

3. 커밋 메시지 편집

모든 커밋을 squash로 변경한 후, 새로운 커밋 메시지를 입력하며 불필요한 메시지는 삭제하거나 주석 처리합니다.

예:

pick commit_hash_1  
squash commit_hash_2  
squash commit_hash_3  

새 메시지:

# 新機能の完全な実装  

4. 변경 사항 커밋

새 커밋 메시지를 저장하고 리베이스를 완료합니다.

git rebase --continue  

구체적인 예시

다음과 같은 커밋이 있다고 가정합니다:

  • 커밋A: 新機能の初期実装
  • 커밋B: 新機能のバグ修正
  • 커밋C: 新機能の改善

이들을 하나의 커밋으로 병합하려면 다음을 수행합니다:

  1. 리베이스 시작:

    git rebase -i HEAD~3  
  2. 편집:

    pick commit_hash_1  
    squash commit_hash_2  
    squash commit_hash_3  
  3. 새 메시지 입력:

    # 新機能の完全な実装  
  4. 리베이스 완료:

    git rebase --continue  

주의 사항

안전한 환경에서 실행

스쿼시는 히스토리를 변경하는 작업이므로 중요한 정보를 잃지 않도록 주의해야 합니다. 실험적인 변경은 새 브랜치에서 시도하는 것을 권장합니다.

공유 브랜치 사용 시 주의

다른 개발자와 공유하는 브랜치를 스쿼시할 경우, 작업에 영향을 미칠 수 있으므로 팀과 사전에 확인하는 것이 중요합니다.

스쿼시 후 원격에 반영

1개의 댓글

comment-user-thumbnail
2025년 2월 24일

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.

답글 달기