주의

  • 본 게시글은 Claude로 작성되었습니다. 잘못된 정보가 있을 수 있습니다.

개요

Git 커밋 스쿼싱은 여러 개의 작은 커밋을 하나의 큰 커밋으로 병합하는 프로세스입니다. 이 기술은 코드 히스토리를 깔끔하게 유지하고, 의미 있는 변경사항을 하나의 커밋으로 그룹화하는 데 유용합니다. 이 가이드에서는 커맨드 라인 인터페이스(CLI)와 IntelliJ IDEA의 그래픽 사용자 인터페이스(GUI)를 사용한 커밋 스쿼싱 방법을 모두 설명합니다.

상세 정보

커밋 스쿼싱은 주로 다음과 같은 상황에서 유용합니다:

  1. 기능 개발 중 여러 작은 커밋을 만들었을 때
  2. 코드 리뷰 후 수정사항을 추가했을 때
  3. 실험적인 변경사항을 여러 번 커밋했을 때

스쿼싱을 통해 이러한 여러 커밋을 하나의 깔끔한 커밋으로 정리할 수 있습니다.

사용 방법

커맨드 라인 인터페이스(CLI) 사용

게시판 글 수정 기능 구현 시나리오를 예로 들어 커밋 스쿼싱 과정을 설명하겠습니다.

  1. 기능 구현 및 여러 커밋 생성:

    git checkout -b feature/edit-post
    # 수정 기능 구현
    git commit -m "Add edit button to post"
    # 추가 수정
    git commit -m "Implement edit form submission"
    # 버그 수정
    git commit -m "Fix validation error in edit form"
  2. 커밋 히스토리 확인:

    git log --oneline

    출력:

    abc1234 Fix validation error in edit form
    def5678 Implement edit form submission
    ghi9101 Add edit button to post
    jkl1121 (origin/main) Previous commit
    
  3. 인터랙티브 리베이스 시작:

    git rebase -i HEAD~3
  4. 리베이스 편집기에서:

    pick ghi9101 Add edit button to post
    squash def5678 Implement edit form submission
    squash abc1234 Fix validation error in edit form
    

    첫 번째 커밋은 ‘pick’으로 두고, 나머지는 ‘squash’로 변경합니다.

  5. 커밋 메시지 편집: 에디터가 열리면 새 커밋 메시지를 입력합니다:

    Implement post edit functionality
    
    - Add edit button to post
    - Implement edit form submission
    - Fix validation error in edit form
    
  6. 리베이스 완료: 에디터를 저장하고 닫으면 리베이스가 완료됩니다.

  7. 강제 푸시 (주의: 협업 시 주의 필요):

    git push origin feature/edit-post --force

IntelliJ IDEA GUI 사용

IntelliJ IDEA에서 GUI를 사용하여 커밋을 스쿼시하는 방법은 다음과 같습니다:

  1. 브랜치 생성 및 커밋:

    • VCS > Git > Branches에서 새 브랜치 ‘feature/edit-post’를 생성합니다.
    • 변경사항을 만들고 여러 번 커밋합니다.
  2. Git 로그 열기:

    • 메뉴에서 ‘View > Tool Windows > Git’을 선택하거나 Alt+9를 눌러 Git 툴 윈도우를 엽니다.
    • ‘Log’ 탭을 선택합니다.
  3. 스쿼시할 커밋 선택:

    • 스쿼시하려는 커밋들을 Ctrl 키를 누른 채 클릭하여 선택합니다.
    • 선택한 커밋 중 가장 오래된 커밋을 우클릭합니다.
  4. 인터랙티브 리베이스 시작:

    • 컨텍스트 메뉴에서 ‘Interactively Rebase from Here’를 선택합니다.
  5. 리베이스 작업 선택:

    • 열린 대화상자에서 스쿼시할 커밋들의 작업을 ‘squash’로 변경합니다.
    • 가장 오래된 커밋은 ‘pick’으로 둡니다.
    • ‘Start Rebasing’ 버튼을 클릭합니다.
  6. 커밋 메시지 편집:

    • 새 대화상자가 열리면 최종 커밋 메시지를 편집합니다.
    • 필요한 경우 이전 커밋 메시지들을 참고하여 변경 내용을 요약합니다.
  7. 리베이스 완료:

    • ‘OK’ 버튼을 클릭하여 리베이스를 완료합니다.
  8. 강제 푸시:

    • Git 툴 윈도우에서 브랜치를 우클릭하고 ‘Force Push’를 선택합니다.
    • 경고 메시지를 확인하고 진행합니다.

참고 자료

추가 정보

IntelliJ IDEA에서 커밋 스쿼싱과 일반 머지의 차이점은 무엇인가요?

IntelliJ IDEA에서 커밋 스쿼싱은 ‘Interactively Rebase from Here’ 기능을 통해 수행되며, 여러 커밋을 하나로 압축합니다. 일반 머지는 ‘Merge’ 기능을 사용하며, 모든 개별 커밋을 유지합니다. 스쿼싱은 더 간결한 히스토리를 제공하지만, 상세한 작업 과정은 숨겨집니다.

IntelliJ IDEA에서 이미 푸시한 커밋을 스쿼시해도 될까요?

이미 공유된 브랜치에 푸시된 커밋을 스쿼시하는 것은 권장되지 않습니다. 불가피한 경우, IntelliJ IDEA에서 ‘Force Push’ 옵션을 사용할 수 있지만, 팀원들과 반드시 협의 후 진행해야 합니다.

관련 질문 및 추가 정보

  • IntelliJ IDEA에서 Git 리베이스와 머지의 차이점은 무엇인가요?
  • IntelliJ IDEA의 Git 통합 기능 중 커밋 스쿼싱 외에 유용한 기능은 무엇이 있나요?
  • IntelliJ IDEA에서 Git 브랜치 전략을 효과적으로 관리하는 방법은 무엇인가요?

IntelliJ IDEA를 사용하여 Git 작업을 수행할 때는 항상 주의가 필요하며, 특히 공유 브랜치에서 작업할 때는 팀의 워크플로우와 규칙을 준수해야 합니다. GUI 도구는 편리하지만, 기본적인 Git 개념을 이해하는 것이 중요합니다.