git rebase
git rebase는 두 개의 공통 베이스를 가진 브랜치에서 한 브랜치의 베이스를 다른 브랜치의 최신 커밋으로 옮기는 작업.
이사 개념이라고 생각하자.
$ git init
$ touch 0 && git add . && git commit -m "c0" // 파일 생성 후 추가하고 커밋
$ git checkout -b bugFix // bugFix 브랜치 없으면 생성하고 이동
$ touch 1 && git add . && git commit -m "c1"
$ touch 2 && git add . && git commit -m "c2"
$ touch 3 && git add . && git commit -m "c3"
$ git checkout main // 다시 main 브랜치로 이동
$ touch 4 && git add . && git commit -m "c4"
$ touch 5 && git add . && git commit -m "c5"
$ touch 6 && git add . && git commit -m "c6"
$ git rebase main bugFix
// bugFix에서 main으로 bugFix 거를 가지고 오겠다. (이사의 개념)

git rebase vs git merge
· git rebase의 경우 최신 변경사항을 즉각 반영할 수 있다는 장점이 있다.
공유 브랜치에 대한 최신 커밋을 반영하면서 작업을 해야할 때 git rebase를 사용하면 작업 브랜치에서 항상 최신 변경 사항을 적용한 커밋을 유지할 수 있다.
· git rebase의 경우 합쳐질 브랜치들의 커밋들이 다 남아 있기 때문에 변경이력을 알기 쉽다.
· git rebase는 커밋 이력을 남기지 않으므로 커밋 히스토리가 깔끔해진다.
위의 그림만 봐도 알 수 있다.
· git merge의 경우 충돌이 발생하면 한번만 처리하면 되지만 rebase의 경우 작업 브랜치의 각각 커밋마다 conflict를 해결해야 한다는 단점이 있다. 하지만 이는 정확히 어느 커밋에서 충돌이 난건지 파악할 수 있고 모든 커밋이 전부 정상적으로 동작하도록 각각의 커밋마다 충돌을 해결하는 것이 코드 에러를 줄이고 품질을 높일 수 있기 때문에 단점으로만 보지 않는다고 한다.