기술노트/깃허브

Rebase를 사용해서 tree 정리

반응형

rebase는 merge와 비슷하다. 

rebase는 두 branch를 합칠 때 사용한다.

SourceTree에서는 "재배치"라는 명령이다.

 

장점 : 커밋 히스토리가 깔끔해짐

단점 : 잘못하면 위험. github에 올라갔거나 협업을 하고 있는 경우에는 매우 위험하다. 

 

rebase라는 branch를 만들어보자.

 

 

 

이렇게 대충 내용써주고

 

 

 

 

스테이지에 올리고 커밋도해준다.

 

 

 

 

 

 

rebase를 checkout한 상태에서

 

main이 있는곳에 branch를 또 새로 만들것이다.

 

 

 

 

 

etc에는 rebase 내용도 없다.

 

그러면 여기에 

 

이렇게 쓰고 

 

 

 

 

스테이지에 올리고 커밋을 해주자.

 

 

 

 

 

이렇게 두 갈래가 생긴다.

 

이제 merge를 해보자.

 

etc와 rebase 둘 중에 하나만 fast forward가 가능하다. 

 

일단 main을 checkout해보자.

 

그러고 rebase 선택 - 우클릭 - 병합

 

 

확인

 

 

main이 rebase로 올라왔다.

 

이번에는 etc하고도 병합을하자.

 

 

 

 

확인.

 

누르면? 예상했다시피 충돌이 일어난다.

 

이번에는 두 개 다 필요한 내용이다.

 

 

 

이렇게 해주고 저장.

 

 

스테이지에 올리고 커밋하자.

 

근데 지금처럼 merge하려했는데 충돌이 난 경우는 

 

 

 

 

 

요런식으로 알아서 commit메세지가 적혀있기 때문에 굳이 commit 메세지는 건드릴 필요없다.

 

 

이렇게 merge를 통해 합쳐졌다.

 

근데 다시 Revert " revert 연습"의 위치로 되돌아갈 것이다.

 

main을 checkout한 상태에서 Revert " revert 연습" 으로 reset하자.

 

 

 

그리고는 main이 있는 위치에 merge-test라는 branch를 만들어준다.

 

 

그리고 merge-test를 checkout한 상태에서 etc 선택 - 우클릭 - 병합

 

 

 

 

 

확인

 

 

 

 

이번에는 rebase를 checkout하자.

 

그리고 

 

 

 

merge-test라는 branch를 우클릭하고 현재 변경사항을 merge-test에 재배치를 누르자.

 

 

 

확인

 

 

 

 

 

충돌이난다.

 

 

 

 

 

 

 

이걸

 

 

 

이렇게 고치자.

 

이 내용 스테이지에 올리고 커밋하려하면?

 

 

 

원래 merge를 했을 때는 자동완성된 merge 충돌 메세지가 떴었는데 이번에는 안뜬다. 

 

 

 

그래서 이 경우는 이렇게 하는 것이 아니다.

 

 

커밋하지 않은 변경사항을 선택하고

 

branch에서 merge-test를 선택하자. (지금은 checkout 못함)

 

merge -test를 우클릭 - 현재 변경사항을 merge-test에 재배치 클릭

 

 

재배치 계속을 누르면 된다. 

 

 

 

요런식으로 한줄로 된다. 

 

갑자기 에러가 생겨서 다시 만들었다...

 

test를  merge-test로 생각하면 된다.

 

이렇게 rebase가 맨 위로 올라갔다. 

 

그다음 test를 checkout한 상태에서 

branch에서 rebase 선택 - 우클릭 - 현재 브랜치로 rebase 병합

 

 

 

test도 rebase의 위치로 올라오게 된다. 

 

이렇게 한줄로 됐다.

 

rebase를 하면 이렇게 한줄로 예쁘게 된다.

 

근데 아까 필자가 생겼던 오류처럼 여러 예상치 못한 오류가 생길 수 있다.

방법도 되게 복잡하고, 협업을 하는 상황이라면 골치아픈 상황이 많이 생긴다.