Git/[인강] Git & Github 실무 활용 완벽 가이드

[Git & Github] 15. 리베이스(Rebase)는 가장 까다로운 명령어일까?

pakms980319 2025. 4. 30. 16:34
Important

    ● 리베이스와 병합의 차이
    ● git rebase
    ● 리베이스를 쓰지 말아야 할 상황

 

* 리베이스?병합?

협업 과정에서 각자 피처 브랜치를 이용해 작업하는것을 이제는 안다. 여기서 내 작업이 끝나기 전에 누군가의 작업물이 메인 브랜치에 올라간 경우 변경사항을 최신으로 유지하기 위해서 나의 피처 브랜치에 pull을 해야 할 것이다. 이 때 병합 커밋이 필연적으로 발생할텐데 이런 경우가 아주 빈번하게 발생한다면 나의 작업과는 관계없는 병합 커밋이 많이 생기게 되어서 이력이 지저분해 질 것이다.

🔧 기본 사용법: git rebase <브랜치명>
git rebase main
위 명령은 현재 브랜치의 커밋들을 main 브랜치 끝에 다시 적용한다.


목표: feature 브랜치를 main의 최신 상태로 맞추고 싶다면?
git checkout feature
git rebase main

 

병합(위), 리베이스(아래)

 

병합 대신 리베이스를 사용하면 피처 브랜치의 베이스를 새로 설정해서 일직선으로 만들어준다.

피처 브랜치의 커밋들을 그대로 다시 생성하면서 메인 브랜치의 끝 지점에서부터 배치한다.

병합 커밋이 사라지면서 이력이 깔끔해졌다.

 

내가 작업하지 않은 병합 커밋들을 삭제하고 일직선으로 재배치 함으로써 이력이 보기 좋게 되었다.

참고로 feat 브랜치의 커밋들은 재배치되면서 커밋 해시가 변경된다.

 

 

* 리베이스를 하지 말아야 하는 경우

리베이스를 실행하는 경우 기존 커밋들이 재배치되면서 커밋 해시가 변경된다고 했다.

그렇기 때문에 다른 개발자들이 이미 가지고 간 커밋을 리베이스하면 안된다.

피처 브랜치를 메인 브랜치로 push하고 병합이 된 후 누군가 메인 브랜치를 가져가서 해당 이력을 가지게 되었고 작업을 한다면 절대로 리베이스를 사용하면 안된다.

 

한 줄로 정리할 수 있다. "이미 공유한 커밋을 리베이스하면 안된다."

 

 

* 리베이스와 충돌

리베이스 도중 충돌이 발생한 경우 취소하고 이전으로 돌아가거나 충돌을 처리하는 방법이 있다.

충돌을 처리하는 방법은 병합과 비슷하다.

git add/rm <conflicted_files>
git rebase --continue

 

충돌이 발생한 파일을 처리한 후 스테이지에 올리고 리베이스를 계속 진행하면 된다.

 

리베이스는 유용한 기능이지만 사용하지 말아야 할 때를 정확히 알고 있어야 한다.

 


 

✅ 올바른 동작 설명:

git rebase maintest 브랜치에서 실행하면

  • 로컬의 main 브랜치 기준으로
  • test 브랜치의 커밋을 떼어서
  • main 브랜치의 끝에 재적용한다.

  • test 브랜치의 커밋들을 잠시 분리하고
  • 로컬 main 브랜치의 최신 커밋 뒤에
  • test 브랜치의 커밋들을 다시 적용 (replay) 한다.

 

만약 원격 저장소의 최신 main 상태를 기준으로 rebase하고 싶다면, 이렇게 해야 한다.

# 1. 원격 저장소의 최신 커밋 가져오기
git fetch origin

# 2. test 브랜치에서 rebase 수행
git checkout test
git rebase origin/main

 

이렇게 하면 origin/main - 즉 원격 저장소의 최신 상태 기준으로 리베이스 된다.


참고

1) https://www.udemy.com/course/best-git-github

2) https://erikanes.tistory.com/377

 

[Git & Github] 15. 리베이스(Rebase)는 가장 까다로운 Git 명령어일까?

Important 리베이스와 병합의 차이 git rebase 리베이스를 쓰지 말아야 할 상황 * 리베이스? 병합? 협업 과정에서 각자 피처 브랜치를 이용해 작업하는것을 이제는 안다. 여기서 내 작업이 끝나기전에

erikanes.tistory.com