rebase을 배우기 위해서는 base라는 개념을 알고 있어야 하는데요.
쉽게 말하자면 base는 공통의 조상이라고 생각하면 되고
이 말이 이해가 안되신다면 전에 올려놓았던 게시글을 봐주시면 감사하겠습니다.
m1 -> m2
rebase는 a -> b -> [c]
t1 -> t2
topic으로 rebase를 한다는 것은 main 브렌치의 조상인 c base를 m1의 조상을 t2 버전으로 가르키는 것 입니다.
이렇게 선형적으로 로그를 볼 수 있게 말이죠!
a -> b -> [c] -> t1 -> [t2] -> m1 -> m2
우선 디렉토리를 새로 만들어주었고 초기화, 파일 생성, 브렌치 생성을 해주었습니다.
현재 base는 init이 되는 것이고 main 브렌치에 2개의 버전을 추가해줬습니다.
이제 브렌치를 topic 으로 옮겨주고 3개의 버전을 만들어주었습니다.
타임라인을 보시고 이렇게 따라하셨으면 rebase을 사용할 준비가 되었습니다.
저희가 할 것은 현재 main의 base는 init인데 base를 t3 버전으로 가르키게 해서 선형으로 만들 것 입니다.
(남들이 보면 t1~t3 작업한 후에 m1 ,m2가 작업된 것처럼 보이게)
우선 main의 base를 바꿀려고 하고 있으니 main 브렌치로 이동해주시고요!
git checkout main
이후에 base를 옮겨보겠습니다.
topic 브렌치가 가르키고 있는 커밋으로 base을 옮기겠습니다.
git rebase topic
rebase를 하게 된다면 topic 브렌치 상태에서 m1 이 병합되어 새로운 버전을 만들고
이후에 m2가 또 병합되어 버전을 만들어 총 2개의 버전이 생성된답니다.
엄청나죠?
init 을 base로 해서 병렬로 갔지만 rebase을 하고 나니 t3 이후에 m1작업이 끝나고 m2 작업이 끝난 것 처럼 보이네요.
이렇게 cherry-pick 과 rebase을 알아보았고, 지금은 다른부분을 수정하여 충돌이 안나지만 다음시간엔
같은 부분을 수정하고, 충돌한다는 가정하에 실습을 진행해보겠습니다.
마지막으로 rebase를 쓸 때 주의점은 m1과 m2를 push 한 이후 로는 절대로 사용해서는 안됩니다.
그리고 또 한가지는 merge를 통해 만든 결과와 rebase를 통해 만든 결과는 방식이 다를 뿐 꼭 같아야 한다는 점!
'Git' 카테고리의 다른 글
Git cherry-pick 충돌 (0) | 2024.02.01 |
---|---|
Git cherry-pick (0) | 2024.01.31 |
Git cherry-pick & rebase (0) | 2024.01.31 |
Git CLI 협업3 (fetch) (1) | 2024.01.31 |
Git CLI 협업2 (0) | 2024.01.31 |