본문 바로가기

Development/Git

Git Rebase와 Cherry-Pick: 버전 관리 테크닉

Git의 기본적인 기능에 익숙해졌다면, 이제 RebaseCherry-Pick 같은 고급 기능을 활용해 버전 관리를 더 정교하게 할 수 있다.
이 글에서는 Rebase로 깔끔한 커밋 히스토리 만들기Cherry-Pick으로 필요한 커밋만 선택적으로 가져오기를 상세히 다룬다.


Rebase란? 🔄

Rebase(리베이스)는 브랜치의 변경 사항을 다른 브랜치 위로 재배치하는 작업이다.
쉽게 말해, 마치 브랜치의 타임라인을 새롭게 정리하는 것과 같다.

Rebase의 주요 목적

  1. 커밋 히스토리 정리: 병합(Merge)보다 간결한 히스토리 제공.
  2. 병합 충돌 줄이기: 브랜치를 자주 리베이스해 충돌을 미리 방지.

Rebase 사용법 🌱

기본 Rebase

git checkout feature
git rebase main
  • feature/login 브랜치를 main 브랜치 위로 재배치.
  • 변경 사항을 한 줄로 이어진 깔끔한 히스토리로 만든다.

03 Rebasing the feature branch into main


Interactice Rebase로 커밋 수정하기

git rebase -i HEAD~3
  • HEAD~3: 최근 3개의 커밋을 대상으로 인터랙티브 리베이스 실행.
  • 실행 후 편집 화면에서 각 커밋의 동작을 선택 가능:
    • pick: 그대로 유지.
    • reword: 메시지 수정.
    • squash: 이전 커밋과 합치기.
    • drop: 커밋 삭제.

예시: 커밋 합치기(Squash)

pick 123abc 회원가입 폼 추가
squash 456def 폼 레이아웃 수정

결과:

회원가입 폼 추가 (레이아웃 수정 포함)

Rebase와 Merge 비교 🌟

git Merge vs Rebase

  • Merge: 병합 커밋을 생성해 히스토리가 복잡해질 수 있다.
  • Rebase: 병합 커밋 없이 히스토리를 단순화.

[!TIP]
협업 시 Rebase를 사용할 경우 Push 전에만 사용하자. 이미 Push한 커밋을 Rebase하면 팀원들과의 히스토리가 충돌할 수 있다.


Cherry-Pick이란? 🍒

Cherry-Pick(체리픽)은 특정 커밋만 골라서 다른 브랜치로 가져오는 명령어다.

  • 불필요한 변경 사항을 포함하지 않고, 필요한 부분만 적용 가능.

Cherry-Pick 사용법 🌟

기본 사용법

git cherry-pick <커밋 해시>

예시

git checkout feature/login
git cherry-pick a1b2c3
  • a1b2c3: main 브랜치의 특정 커밋을 feature/login 브랜치로 가져옴.

여러 커밋 Cherry-Pick

git cherry-pick <커밋 해시1> <커밋 해시2>

예시

git cherry-pick a1b2c3 d4e5f6

Cherry-Pick 충돌 해결

Cherry-Pick 중 충돌이 발생하면 Git이 멈추고 충돌 메시지를 출력한다.

  1. 충돌된 파일 수정.
  2. 수정 완료 후 추가(Commit).
git status
git add <파일명>
git cherry-pick --continue

Rebase와 Cherry-Pick 실제 사례 💡

1. Rebase로 병합 히스토리 정리

상황

  • feature/signup 브랜치에서 작업 중, main 브랜치에 새로운 변경 사항 추가.
  • 충돌 없이 병합하려면 Rebase 사용.

명령어

git checkout feature/signup
git rebase main

결과


2. Cherry-Pick으로 특정 기능 가져오기

상황

  • feature/payment 브랜치에 포함된 결제 API 커밋만 main 브랜치로 가져오기.

명령어

git checkout main
git cherry-pick a1b2c3  # 결제 API 커밋

결과


마무리하며 🎉

RebaseCherry-Pick은 Git을 더 정교하게 사용하는 데 필수적인 명령어다.

  • Rebase로 깔끔한 히스토리를 유지하고,
  • Cherry-Pick으로 원하는 커밋만 골라 활용하자.

궁금하거나 잘못된 점은 댓글로 남겨 주세요! 🚀