Git으로 관리를 하기 위한 flow에는 여러 종류의 branch가 존재한다.
대략적으로 5가지 종류가 있어서 그 용도에 따라서 사용하게 된다.
우선 개발을 진행할때에는 develop에서 branch를 만들어서
기능에 따라 feature를 통해 개발을 진행한다.
그리고 모든 개발이 완성되면 develop에서 release를 다시 만들어
main에 배포하기 전에 테스트 과정을 거치게 된다.
이때 QA를 시작하면서 발견된 버그들을 차례대로 수정하게 되고,
어느정도의 검증이 끝나면 main에 배포하게 된다.
(version update v 1.0.0 -> v 2.0.0)
하지만, 배포된 이후에 추가적인 버그나 수정사항 등이 생기게 되면,
hotfix를 통해 수정을 하게 된다.
(version v 2.0.0 -> v 2.0.1)
Git을 통해 작업을 진행할때에,
여러 branch를 만들어 commit 메세지를 생성하고,
완성될때마다 merge를 하게 되면 작업한 순서에 따라 commit 메시지가 뒤섞이게 된다.
위 그림에서 sign-up branch가 merge가 되고 이후 sign-in branch를 merge하게 되면,
commit 메시지가 섞여서 history를 한눈에 알아보기 힘들다.
그래서 이 commit들을 관리하기 위해 사용하는 것이 rebase이다.
rebase는 말 그대로 branch를 생성한 기점을 다시 잡는 방법으로 아래 그림을 보면 이해하기 쉽다.
같이 생성된 sign-up, sign-in branch인 상황에서,
먼저 sign-up이 merge가 이루어지면, 아직 merge가 안된 sign-in branch를 rebase 시켜 merge된 이후로 바꿔준다. (시작부분을 다시 설정함)
명령어는 git rebase -i main
으로 실행할 수 있으며,
이 rebase를 실행하는 동안 해당 brach에서 생성한 commit 메시지들을 합쳐주는 Squash를 할 수 있다.
squash는 작업내용을 하나로 합치는 기능인데,
rebase를 실행할때, conflict가 발생하면 commit에 따라서 여러번 발생하게 되므로 squash를 해주는것이 좋다. (그리고 관리 측면에서도 더 좋다.)