코드 저장소.

Git rebase 본문

웹개발/Git

Git rebase

slown 2025. 4. 25. 14:47

목차 

1.Rebase?

2.Rebase vs Merge

3.적용

 

1.Rebase?

깃에서 사용하는 rebase는 기존에 다른 브랜치에서 작업을 했던 내용을 옮기는 것을 리베이스라고 합니다.

 

리베이스의 특징은 다음과 같다:

  • 커밋 기록이 깔끔하게 한 줄로 정리된다.
  • 분기 흔적 없이, 마치 처음부터 같은 줄기에서 작업한 것처럼 보인다.
  • 하지만 원래 커밋 기록이 변형되기 때문에 주의가 필요하다.

리베이스를  하면 깃 그래프는 다음과 같습니다.

 

o---o---o---o---o---o (main + feature rebased)

 

그럼 흔히 다른 브랜치와 합치는것이라면 떠오르는 것이 Merge인데 이번에는 Rebase와 Merge의 차이점에 대해 알아보겠습니다.

2.Rebase vs Merge

우선 Merge는 아시다시피 다른 브랜치와 합치는 것을 말합니다. 그리고 merge를 하게 되면 각 브랜치가 따로 작업을 한 내용은 고스란히 남습니다.

 

Merge의 특징을 보면 아래와 같습니다.

  • 브랜치 분기와 병합 흔적이 기록에 남는다.
  • Merge 커밋이 하나 새로 생긴다.
  • 서로 다른 작업 이력을 존중하는 방식이다.

그리고 Merge의 그래프는 다음과 같습니다.

 

o---o---o (main)
     \
      o---o---o (feature)
          /
    (merge commit)

 

위 둘의 차이점을 보면 아래의 표와 같습니다.

항목 Merge Rebase
개념 브랜치를 합친다. 브랜치 기반으로 옮긴다.
기록여부 분기/병합 흔적 남음 깔끔한 일직선 기록
Merge 커밋 생긴다. 생기지 않는다.
충돌 발생시 병합 중 충돌 해결 리베이스 중 충돌 해결
Push 이후 사용 안전함 주의 필요(Force Push를 필요할 수 있음)
사용 목적 기록 보존,협업 흔적 남기기 커밋정리, 깔끔한 히스토리 남기기

3.적용

그럼 실제로 깃에 PR을 올린 후에 리베이스를 하는 과정을 알아보겠습니다.

 

1.깃에 작업을 한 브랜치로 작업물을 올립니다.

 

2.PR Request를 합니다.

 

3.PR은 GitHub에서 머지를 합니다.

 

4.main으로 돌아가서 작업물을 최신화를 합니다. (git pull origin main)

 

4-1.하지만 PR이 여러개 쌓인 경우 아래의 사진처럼 충돌이 났을 가능성이 있습니다.

 

5.위의 상황의 경우에는 우선 pr을 올린 브랜치로 이동을 합니다. 

6.해당 브랜치로 이동을 한 후에 git rebase main으로 리베이스를 시작합니다.

7. 리베이스 중에 충돌이 난 부분은 수정 후 git add 로 다시 올립니다. 

 

8. 그 다음 git rebase --continue로 충돌이 난 부분을 계속 작업을 합니다.

 

9. 컨티뉴를 다 했으면 마지막으로 git push -f 로 강제 푸시를 합니다. 

-> 여기서 강제 푸시를 하는 것은 PR에 리베이스를 적용한것을 깃에 반영을 하기 위함입니다.

 

10. 마지막으로 PR 깃허브가서 충돌이 났는지를 확인하고 충돌이 안났으면 머지를 누릅니다.

'웹개발 > Git' 카테고리의 다른 글

git pull request가 나오지 않는 경우  (0) 2025.01.10
Git ?  (0) 2024.12.25