Git Rebase

박기범·2024년 11월 28일
0

Git Rebase란?

git rebase는 두 가지 주요 작업을 수행할 수 있는 Git 명령어입니다

  1. 커밋을 다른 커밋 위로 재배치: 현재 브랜치의 커밋을 다른 브랜치의 커밋 위로 재배치하여, 마치 그 커밋들이 원래 그 브랜치에서 진행된 것처럼 히스토리를 수정합니다.

  2. 히스토리 정리: 여러 커밋을 합치거나 수정하는 데 유용하게 사용됩니다.

git merge와 달리 rebase는 히스토리를 "재작성"합니다. 즉, 병합 커밋을 만들지 않고, 커밋들이 직선으로 이어지도록 만듭니다. 이로 인해 rebase는 좀 더 깔끔한 히스토리를 제공합니다.


Rebase의 기본 사용법

  1. 현재 브랜치에서 다른 브랜치의 최신 변경 사항을 가져오려면 git rebase를 사용합니다. 예를 들어, feature-branch에서 작업 중이고, main 브랜치에 새로운 커밋이 추가된 경우
# 먼저 feature 브랜치로 이동
git checkout feature/my-feature

# main 브랜치에서 최신 커밋을 가져오기
git fetch origin

# main 브랜치의 최신 커밋을 feature 브랜치 위로 리베이스
git rebase origin/main

# main 브랜치에서 최신 커밋을 가져오기
git fetch origin

# main 브랜치의 최신 커밋을 feature 브랜치 위로 리베이스
git rebase origin/main

이 문장을 합쳐서

git pull origin main --rebase

이렇게 쓸 수도 있다.


  1. rebase 중에 충돌이 발생하면, Git은 해당 충돌을 해결하라고 안내합니다. 충돌을 해결한 후, 수정된 파일을 스테이징하고 git rebase --continue 명령어로 재개합니다.
# 충돌이 발생하면 파일 수정 후 스테이지
git add <수정된 파일>

# rebase 계속 진행
git rebase --continue

충돌 해결 후 rebase가 완료되면, 내 feature 브랜치의 커밋은 main 브랜치의 최신 커밋 뒤로 깔끔하게 이어집니다.

...아무래도 팀 프로젝트를 진행하면서 처음 사용해본 rebase 방식이라서 이 부분에서 많이 당황했습니다. ㅠㅠ

저는 이 방식으로 한 뒤에 PR에서 커밋이 한 번 더 추가된 문제가 생겨서
원격 feature 브랜치에 강제 push를 해주어 원격 브랜치를 동기화해주어 해결하였습니다.

git push origin [feature/branch] --force


Git Flow와 Git Rebase 활용 시 유의사항

feature 브랜치에서 rebase를 사용할 때, 자주 main 브랜치의 최신 커밋을 반영하는 습관을 들여야 합니다. 이는 나중에 main 브랜치에 병합할 때 큰 충돌 없이 깔끔하게 통합되도록 도와줍니다.

rebase를 사용할 때는 충돌을 잘 해결하고, 테스트가 끝난 후에 feature 브랜치를 main 브랜치에 병합하세요.

rebase는 이미 공개된 커밋을 변경하기 때문에, 다른 팀원과 공유된 브랜치에서 rebase를 사용할 때는 신중해야 합니다. 특히 이미 공유된 커밋을 rebase하면 커밋 ID가 변경되어 다른 팀원에게 혼란을 줄 수 있습니다.


원래 한 번 맞고 난 뒤 깨달음을 얻고 배우는 것이 맞는것인가...

profile
프론트엔드 개발공부를 하고있습니다.

0개의 댓글

관련 채용 정보