IT/GIT

GIT Rebase vs Cherry-Pick: 차이점과 사용법 완벽 정리

파파대니 2024. 12. 23. 16:32

목차

    반응형

    GIT Rebase vs Cherry-Pick: 차이점과 사용법 완벽 정리

    안녕하세요. 파파대니입니다.

    Git은 강력한 버전 관리 도구로 다양한 작업을 효율적으로 수행할 수 있습니다.

    그중 rebase와 cherry-pick은 코드 변경 사항을 조정하거나 특정 부분만 선택해 반영할 때 사용하는 주요 명령어입니다.

    이 두 명령어는 사용 목적과 동작 방식이 다르므로, 올바르게 이해하고 사용하는 것이 중요합니다.

    이번 글에서는 git rebase와 git cherry-pick의 차이점과 사용법을 상세히 설명하겠습니다.

     

    1. Git Rebase란?

    git rebase는 하나의 브랜치 히스토리를 다른 브랜치에 이어 붙이는 작업을 수행합니다.

    이를 통해 프로젝트 히스토리를 더 깔끔하고 간결하게 정리할 수 있습니다.

     

    주요 특징

    • 브랜치 병합을 깔끔하게 유지: Rebase를 사용하면 불필요한 병합 커밋(merge commit)을 제거하고, 마치 모든 작업이 순차적으로 이루어진 것처럼 히스토리를 정리할 수 있습니다.
    • 히스토리 재작성: Rebase는 커밋 히스토리를 재작성(rewrite)하므로 기존 커밋의 SHA-1 해시 값이 변경됩니다.

    사용 예시

    # feature 브랜치를 main 브랜치로 rebase
    git switch feature
    git rebase main

    위 명령은 feature 브랜치를 main 브랜치의 최신 커밋 위에 재배치합니다.

    결과적으로, feature 브랜치의 모든 커밋이 main 브랜치 이후에 이어지는 형태가 됩니다.

     

    주의할 점

    • 공유된 브랜치에서 사용하지 않기: 이미 공유된 브랜치에서 rebase를 하면 다른 개발자와의 충돌(conflict)이 발생할 수 있습니다.
    • 커밋 히스토리 변경: Rebase는 히스토리를 재작성하므로 변경 후에는 기존 히스토리와 호환되지 않을 수 있습니다.

    2. Git Cherry-Pick이란?

    git cherry-pick은 특정 커밋만 선택해서 다른 브랜치로 복사하는 명령어입니다.

    말 그대로 "체리(cherry)를 골라 담는" 작업입니다.

     

    주요 특징

    • 특정 커밋만 반영: 한 브랜치의 특정 커밋을 다른 브랜치로 가져올 때 사용합니다.
    • 히스토리 보존: 선택한 커밋의 원래 히스토리는 변경되지 않습니다.

    사용 예시

    # 특정 커밋을 현재 브랜치로 가져오기
    git cherry-pick <commit-hash>

    예를 들어, main 브랜치에 포함된 특정 커밋(abc123)을 feature 브랜치로 가져오고 싶다면 다음과 같이 실행합니다.

     

    git switch feature
    git cherry-pick abc123

     

    주의할 점

    • 충돌 발생 가능성: 가져오는 커밋이 현재 브랜치와 충돌할 경우, 충돌을 수동으로 해결해야 합니다.
    • 반복 작업: 여러 커밋을 가져와야 할 때는 반복적으로 명령을 실행해야 하므로 비효율적일 수 있습니다.

    3. Git Rebase와 Cherry-Pick의 주요 차이점

    특징 Git Rebase Git Cherry-Pick
    작업 목적 브랜치 전체 히스토리를 재배치 특정 커밋을 선택해 다른 브랜치에 반영
    히스토리 변경 여부 변경됨 (히스토리 재작성) 변경되지 않음 (원본 히스토리 보존)
    대상 커밋 범위 브랜치의 모든 커밋 특정 커밋만 선택
    사용 상황 브랜치 병합 시 히스토리를 깔끔하게 정리하고 싶을 때 특정 커밋만 필요할 때
    충돌 가능성 가능 (모든 커밋에 대해 충돌 해결 필요) 가능 (가져오는 커밋과 충돌 시 해결 필요)

     


    4. 상황별 선택 가이드

    언제 git rebase를 사용할까?

    • 브랜치를 병합하는 과정에서 히스토리를 깔끔하게 유지하고 싶을 때.
    • 병합 커밋을 없애고, 모든 변경 사항을 순차적으로 정리하고 싶을 때.

    언제 git cherry-pick을 사용할까?

    • 한 브랜치의 특정 커밋만 필요한 경우.
    • 다른 브랜치의 일부 기능이나 수정 사항을 빠르게 반영해야 할 때.

    5. 실제 사례로 이해하기

    예제 1: git rebase

    feature 브랜치에서 작업 중인데, main 브랜치에 중요한 업데이트가 반영되었습니다.

    이 변경 사항을 반영한 후 계속 작업하려면 다음을 수행합니다.

    git switch feature
    git rebase main

    이제 feature 브랜치는 main 브랜치의 최신 상태를 포함하고 있습니다.

     

    예제 2: git cherry-pick

    버그가 발생해 이를 해결한 커밋(fix-bug)이 hotfix 브랜치에 있습니다.

    이 수정 사항만 develop 브랜치에 반영하려면 다음을 수행합니다.

    git switch develop
    git cherry-pick fix-bug

    이 방법으로 다른 브랜치에 영향을 주지 않고 필요한 수정 사항만 가져올 수 있습니다.


     

    git rebase와 git cherry-pick은 각각 고유한 역할과 장점을 가진 명령어입니다.

    Rebase는 히스토리를 깔끔하게 정리하고 브랜치를 병합할 때 유용하며, Cherry-Pick은 특정 커밋만 선택적으로 반영할 수 있어 빠른 수정이나 기능 반영이 필요할 때 효과적입니다.

    이 두 명령어의 차이와 사용법을 이해하면 Git 사용 능력을 한 단계 업그레이드할 수 있습니다.

    상황에 맞게 적절한 명령어를 사용해 프로젝트를 효율적으로 관리해 보세요!

    반응형