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 main 을 test 브랜치에서 실행하면
- 로컬의 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
'Git > [인강] Git & Github 실무 활용 완벽 가이드' 카테고리의 다른 글
[Git & Github] 16-1. git commit --amend (0) | 2025.04.30 |
---|---|
[Git & Github] 16. Interactive Rebase를 사용하여 히스토리 삭제하기 (0) | 2025.04.30 |
[Git & Github] 14. Git 협업 워크플로우 (0) | 2025.04.30 |
[Git & Github] 13. Github의 이모저모 : 잡다한 지식 (0) | 2025.04.30 |
[Git & Github] 12. Fetch와 Pull (0) | 2025.04.30 |