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를 하면 이렇게 한줄로 예쁘게 된다.
근데 아까 필자가 생겼던 오류처럼 여러 예상치 못한 오류가 생길 수 있다.
방법도 되게 복잡하고, 협업을 하는 상황이라면 골치아픈 상황이 많이 생긴다.
'기술노트 > 깃허브' 카테고리의 다른 글
revert로 특정커밋 하나 되돌리기 (0) | 2021.01.20 |
---|---|
stash를 이용한 작업 내용 저장 (0) | 2021.01.18 |
Revert를 이용해서 여러가지 commit을 되돌리기 (0) | 2021.01.17 |
revert를 사용하여 commit 되돌리기 (0) | 2021.01.16 |
branch로 commit 되돌리기 (0) | 2021.01.15 |