[Git] 브랜치 병합 전략 : Rebase

Rebase는 커밋 이력을 다시 정렬하여, 브랜치가 분기되지 않은 것처럼 히스토리를 깔끔하게 유지할 수 있습니다.
HootJem's avatar
Aug 27, 2024
[Git] 브랜치 병합 전략 : Rebase

Rebase란?

3-way merge 예
3-way merge 예
Merge는 두 브랜치의 공통 조상에서부터 현재까지의 차이를 3-way로 병합한다. 이런경우 두 브랜치에서 동일한 파일을 수정했다면 충돌이 발생할 수 있습니다.
rebase 후 상태
rebase 후 상태
 
이럴 때 Rebase를 사용하면, 커밋들을 다시 정렬하여 Fast-forward merge를 수행할 수 있게 됩니다. 이렇게 하면 커밋 이력이 깔끔해지고, 마치 브랜치가 분기되지 않고 직선으로 이어진 것처럼 보이게 됩니다.

예제

1. master 브랜치에서 a, b 각각 커밋하기

a 파일 생성 후 add , b 파일 생성 후 add 해야합니다.
GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex05 (master) $ git init # a 파일 생성 $ git add . $ git commit -m "a" # b 파일 생성 $ git add . $ git commit -m "b"
 

2. topic 브랜치에서 c 커밋

작업 하고있는 브랜치가 topic 이 맞는지 확인후
GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex05 (master) $ git checkout -b topic # 브랜치를 생성하고 그 브랜치로 전환 # c 파일 생성 하고 작업합니다. GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex05 (topic) $ git add . $ git commit -m "c"

3. master 브랜치에서 d 커밋

master 브랜치로 이동 하여 작업 브랜치 확인을 해야합니다.
GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex05 (topic) $ git checkout master Switched to branch 'master' # d 파일 생성 하고 작업합니다. GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex05 (master) $ git add . $ git commit -m "d"
 
여기까지 작업하면 이러한 형상을 갖게됩니다.
notion image
이대로 작업하면 3-way 머지가 되지만 이번 포스트에서는 Rebase 를 사용할 것입니다.

4. Rebase 수행

topic 브랜치를 master 뒤로 재정렬하려면 아래와 같이 브랜치 이동하고, 만약 master를 뒤에 둘것이면 master 로 이동해야합니다.
$ git checkout topic Switched to branch 'topic' GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex05 (topic) $ git rebase master
 

5. log 확인

Rebase가 성공적으로 완료되면 커밋 이력은 Fast-forward merge 형태로 정리됩니다.
$ git log
notion image
notion image
 

Git rebase 의 장점

  • 커밋 이력이 깔끔해짐: Rebase는 커밋 이력을 다시 정렬하여, 브랜치가 분기되지 않은 것처럼 히스토리를 깔끔하게 유지할 수 있습니다.
 

📌주의사항

  • 공유된 브랜치에서는 사용하지 말 것: Rebase는 커밋 이력을 재작성하므로. 로컬에서만 사용할 것을 권장합니다.
 
Share article

[HootJem] 개발 기록 블로그