[git] rebase

younoah·2021년 2월 6일
0

[Git]

목록 보기
6/14

rebase

merge기록을 남기지 않는 fast-forward merge방식을 선호한다면, fast-forward merge가 불가능한 상황 (three-way merge case) 일 때 어쩔수 없이 no-fast-forward merge를 진행하여 merge기록을 남겨야만 하는것은 아니다.

rebase를 활용하면 fast-forward merge를 할 수 있다.

  • fast-forward merge가 불가능한 상황 (three-way merge case)

위 이미지는 현재 fast-forward merge가 불가능한 상황인 three-way merge case이다.

branch1 을 커밋 f를 가리키게 rebase를 한다면 fast-forward merge가 가능하다.

rebase 주의점

나 혼자서 branch1 을 작업하고 있다면 언제든지 rebase를 자유롭게 할 수 있지만 만약 다른 개발자와 함께 branch1 에서 작업을 하고 있을 때 rebase를 한다면 위험하다.

rebase를 한다면 커밋의 포인터를 변경하게되는데 이렇게 커밋의 포인터정보가 바뀌게 된다면 기존의 커밋이 유지되는 것이 아니라 겉으로는 이름까지 같아보이는 새로운 커밋이 생성된 것이다.

이 때 내가 rebase를 한다면 다른 개발자와 커밋정보가 다르기 때문에 충돌이 발생할 수도 있으니 꼭 혼자만 브랜치를 관리하고 있을 때만 rebase를 사용하도록 하자.

실험결과 rebase는 해당 브랜치가 파생된 커밋 이전으로 rebase는 불가능한 것 같다.

위 그림 예제를 통해 보면 branch1 은 c커밋 이전으로 rebase가 불가하고 이후 커밋으로만 rebase가 가능하다.

rebase 명령어

# in rebase를 진행할 브랜치
git rebase 브랜치or해시코드

이후에 master 에서 branch1 을 fast-forward merge할 수 있다.

예제

# in master
git merge branch1 #  fast-forward merge 진행

rebase --onto

브랜치에서 파생된 브랜치master브랜치rebase를 해야하는 경우가 있다.

예를 들어 위의 이미지와 같이 server 브랜치에서 파생된 client 브랜치가 있다고 하자.

이 때 테스트가 덜된 sever 브랜치는 납두고 client 브랜치만 master 브랜치로 합치고 싶을 때 rebase--onto 옵션을 활용한다.

git rebase --onto master server client

server브랜치에서 파생된 client 브랜치를 master 브랜치로 rebase --onto 하는 명령어이다.

해당 명령어를 수행하면 아래 이미지와 같이 client 브랜치가 변경된 것을 확인할 수 있다.

profile
console.log(noah(🍕 , 🍺)); // true

0개의 댓글