1. Git Rebase란 무엇인가
- Git에서 브랜치를 통합하는 방법에는 크게 두 가지가 있습니다:
merge와rebase입니다. - Rebase는 한 브랜치의 변경사항을 다른 브랜치 위에 "재적용"하는 방식으로 브랜치를 통합합니다.
- 결과적으로 더 깔끔하고 선형적인 커밋 히스토리를 만들 수 있습니다.
Rebase의 핵심 개념
Rebase는 말 그대로 "기준점을 다시 설정"하는 것입니다. 현재 브랜치의 커밋들을 다른 브랜치의 최신 커밋 위에 차례대로 다시 적용합니다.
2. Merge vs Rebase 비교
2.1 Merge 방식
- 두 브랜치의 최신 커밋과 공통 조상을 기준으로 3-way merge를 수행합니다.
- 새로운 merge 커밋을 생성하여 두 브랜치의 히스토리를 보존합니다.
- 브랜치의 실제 개발 과정이 그대로 기록됩니다.
2.2 Rebase 방식
- 현재 브랜치의 커밋들을 대상 브랜치 위에 순차적으로 재적용합니다.
- 새로운 커밋을 생성하지 않고 기존 커밋들을 이동시킵니다.
- 마치 처음부터 한 줄로 개발한 것처럼 선형적인 히스토리를 만듭니다.
언제 어떤 방식을 사용할까?
- Merge: 브랜치의 실제 개발 과정을 보존하고 싶을 때
- Rebase: 깔끔하고 읽기 쉬운 히스토리를 원할 때
3. 기본 Rebase 사용법
3.1 기본 구문
Git Rebase 기본 명령어
# 현재 브랜치를 master 브랜치 위로 rebase
git checkout feature-branch
git rebase master
# 또는 한 번에
git rebase master feature-branch
이 명령어는 feature-branch의 커밋들을 master 브랜치의 최신 커밋 위에 재적용합니다.
3.2 Rebase 과정 이해하기
- Git은 두 브랜치의 공통 조상을 찾습니다.
- 현재 브랜치의 각 커밋에서 도입된 변경사항(diff)을 임시 파일에 저장합니다.
- 현재 브랜치를 대상 브랜치의 최신 커밋으로 재설정합니다.
- 저장된 변경사항들을 순서대로 다시 적용합니다.
Rebase 후 Fast-forward Merge
# rebase 완료 후 master 브랜치로 전환
git checkout master
# fast-forward merge 수행
git merge feature-branch
Rebase 후에는 fast-forward merge가 가능하여 깔끔한 선형 히스토리를 유지할 수 있습니다.
4. 고급 Rebase 기능
4.1 Interactive Rebase
커밋 히스토리 수정하기
# 최근 3개 커밋을 대화형으로 수정
git rebase -i HEAD~3
Interactive rebase를 사용하면 커밋을 재정렬, 수정, 합치기, 삭제할 수 있습니다.
4.2 --onto 옵션 활용
특정 범위의 커밋만 rebase하기
# client 브랜치에서 server 브랜치와 다른 부분만 master로 rebase
git rebase --onto master server client
이 명령어는 client 브랜치가 server 브랜치에서 분기된 이후의 커밋들만 master 브랜치 위로 이동시킵니다.
브랜치를 직접 체크아웃하지 않고 rebase하기
# server 브랜치를 직접 master 위로 rebase
git rebase master server
5. Rebase 사용 시 주의사항
5.1 황금 규칙
절대 하지 말아야 할 것
이미 원격 저장소에 푸시된 커밋은 rebase하지 마세요!
다른 개발자들이 해당 커밋을 기반으로 작업했을 수 있습니다.