Rebase란?

Merge는 두 브랜치의 공통 조상에서부터 현재까지의 차이를 3-way로 병합한다.
이런경우 두 브랜치에서 동일한 파일을 수정했다면 충돌이 발생할 수 있습니다.

이럴 때
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"
여기까지 작업하면 이러한 형상을 갖게됩니다.

이대로 작업하면 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


Git rebase 의 장점
- 커밋 이력이 깔끔해짐: Rebase는 커밋 이력을 다시 정렬하여, 브랜치가 분기되지 않은 것처럼 히스토리를 깔끔하게 유지할 수 있습니다.
📌주의사항
- 공유된 브랜치에서는 사용하지 말 것: Rebase는 커밋 이력을 재작성하므로. 로컬에서만 사용할 것을 권장합니다.
Share article