Git에서 rebase 명령은 브랜치의 커밋 내역을 다른 브랜치의 커밋 내역 위로 재배치하는 데 사용됩니다. 이를 통해 깔끔하고 선형적인 커밋 히스토리를 유지할 수 있습니다. rebase는 특히 협업 환경에서 효율적인 히스토리 관리를 위해 유용합니다
기본 사용법
1. git rebase
git checkout feature-branch
git rebase main
위 명령은 feature-branch를 main 브랜치의 최신 커밋 위로 재배치합니다.
Rebase 시나리오
1. 간단한 rebase
가장 기본적인 rebase 사용 예제를 살펴보겠습니다.
git checkout main
git pull origin main
git checkout feature-branch
git rebase main
이 명령은 feature-branch를 main 브랜치의 최신 상태로 업데이트합니다. 이 과정에서 feature-branch의 커밋들은 main 브랜치의 마지막 커밋 이후에 추가된 것처럼 보이게 됩니다.
2. 충돌 해결
rebase 중 충돌이 발생할 수 있습니다. 예를 들어, feature-branch와 main 브랜치가 동일한 파일의 같은 부분을 수정한 경우입니다.
git checkout feature-branch
git rebase main
충돌이 발생하면 Git이 이를 알려주고 충돌을 해결하라는 메시지를 출력합니다. 충돌을 해결한 후에는 다음 명령을 사용하여 rebase를 계속 진행합니다:
git add <conflicted-files>
git rebase --continue
3. 인터랙티브 rebase
git rebase -i를 사용하면 인터랙티브 모드로 rebase를 수행할 수 있습니다. 이를 통해 커밋을 편집, 병합, 삭제할 수 있습니다.
git checkout feature-branch
git rebase -i main
이 명령을 실행하면 텍스트 편집기가 열리며, 최근 커밋 목록이 표시됩니다. 각 커밋 앞에 pick이 기본으로 표시되며, 이를 squash, reword, edit 등으로 변경할 수 있습니다.
예를 들어, 두 개의 커밋을 하나로 합치려면 다음과 같이 설정합니다:
pick 1234567 First commit
squash 89abcdef Second commit
파일을 저장하고 닫으면 Git이 두 커밋을 하나로 병합하고, 커밋 메시지를 편집할 수 있게 합니다.
주의 사항
1. 공개된 브랜치에서 rebase 사용 주의
rebase는 커밋 해시를 변경하기 때문에, 이미 공유된 브랜치에서 rebase를 사용하면 협업자에게 혼란을 줄 수 있습니다. 일반적으로 rebase는 로컬 브랜치에서만 사용하고, 공개된 브랜치에서는 merge를 사용하는 것이 좋습니다.
2. rebase vs merge
rebase와 merge는 모두 브랜치를 통합하는 방법이지만, 다른 결과를 초래합니다.
- merge는 두 브랜치를 병합하면서, 분기점이 남습니다. 이는 병합 커밋을 생성하며, 히스토리에 분기점을 유지합니다.
- rebase는 브랜치의 커밋을 다른 브랜치 위로 재배치하여 선형 히스토리를 만듭니다.
예제 시나리오
feature-branch를 main으로 rebase
- feature-branch에서 작업 중이며, main 브랜치에 새로운 커밋이 추가되었습니다.
- feature-branch를 최신 상태로 만들기 위해 rebase를 사용합니다
git checkout feature-branch
git rebase main
이 명령은 feature-branch의 커밋을 main 브랜치의 최신 커밋 이후로 재배치합니다. 만약 충돌이 발생하면 충돌을 해결하고 git rebase --continue를 사용하여 계속 진행합니다.
요약
- rebase는 브랜치의 커밋을 다른 브랜치 위로 재배치하여 깔끔한 히스토리를 유지합니다.
- 기본적인 rebase, 충돌 해결, 인터랙티브 rebase 등의 다양한 시나리오에서 사용될 수 있습니다.
- 공개된 브랜치에서는 rebase 사용을 피하고, 로컬 브랜치에서만 사용하는 것이 좋습니다.
- merge는 병합 커밋을 생성하여 분기점을 유지하고, rebase는 선형 히스토리를 만듭니다.
이렇게 rebase를 활용하면 Git 히스토리를 깔끔하게 유지하고, 협업 중에도 효율적인 코드 관리를 할 수 있습니다.