0. 이 글을 작성하는 이유
Git의 기능 중 rebase를 잘 사용해 본 적이 없었는데 최근 사용하는 일이 늘어 이 rebase라는 기능에 어떻게 적응하게 되었는지, 어떤 기능을 가졌는지 실습 과정을 공유하기 위함
1. 실습 환경
https://learngitbranching.js.org/?locale=ko
이 사이트가 지구상에 있다는 건 큰 축복입니다.
2. 우선 내가 하려고 하는건
이 실습을 여러 번 하게 되면 rebase의 기능 자체에 대해서 몸으로 기억하게 된다.
3. 실습 시작
아무튼 목표처럼 만들어보자.
우선 rebase라는 건 내 브랜치의 base를 다시 설정하는 것이다. 특정 커밋, 브랜치를 기준으로 그 지점부터 다시 base를 잡고 시작하는 것이다.
실은 정답지가 먼저 나왔기 때문에 다시 하나하나 캡처해 가면서 생각을 같이 해보자.
단, 여기 나오는 내용들은 conflict가 없다는 것을 전제조건으로 하고 있다.
우선 최종 목표는 c0~c7까지 커밋이 순서대로 나와야 한다. bugFix 브랜치에 c3커밋이 존재하였고 main브랜치와 c1 커밋을 같은 base로 존재한다. 이제 base를 main브랜치로 지정하여 그 뒤로 이어 붙일 것이다.
git checkout bugFix
git rebase main
이제 같은 방식으로 side브랜치를 붙여보자.
side 브랜치를 bugFix브랜치로 붙이려고 하는데 두 브랜치는 c0커밋을 공통 base로 하고 있다. 그렇다는 건 공통 커밋인 c0를 제외한 c4, c5, c6커밋이 합쳐진다는 것이다.
git checkout side
git rebase bugFix
이제 another 브랜치가 남아있다. another브랜치에서는 c4, c5, c7 커밋을 가지고 있는데 side 브랜치로 rebase하는 경우 c4, c5를 이미 가지고 있기 때문에 c7만 맨 뒤로 붙을 것이다.
git checkout another
git rebase side
이제 각 브랜치의 base만 다시 조정해 주면 된다.
잘 보면 main브랜치만 another브랜치와 같은 커밋을 바라보게 rebase해주면 된다. 모든 커밋이 동일한 경우 HEAD만 변경된다.
git checkout main
git rebase another
4. 다음 글에서는
git merge와 뭐가 다른지 정리해 볼 생각이다.