이번 프로젝트를 진행하면서 깔끔한 Git history를 위해 브랜치 전략으로 rebase를 사용해보기로 했다.
이전까지는 순-정 merge만 사용했었기 때문에 프로젝트를 들어가기 전에 merge 종류에 대해서 학습하고자 한다.
dev
브랜치에서 feature
브랜치를 파서 작업한다고 가정한다.
일단 그동안 사용해왔던 merge 는 커밋 이력이 모두 남는 병합 방법이다.
$ git checkout dev
$ git merge feature
상황에 따라 Fast Forward 방식과 Recursive 방식으로 나뉜다.
dev
에서 feature
로 분기된 이후 dev
에 새로운 커밋이 하나도 올라 오지 않은 경우
feature
의 커밋 이력을 그대로 dev
에 가져올 수 있다. dev
에서 feature
로 분기된 이후 dev
에 새로운 커밋(C
, D
)이 올라온 경우
dev
와 feature
을 공통 부모로 한 새로운 merge 커밋을 생성된다.--no-ff
옵션을 주면$ git checkout dev
$ git merge --squash feature
$ git commit -m "커밋 메시지"
Squash 는 여러 개의 커밋들을 합치는 것이다.
feature
의 커밋들(a
,b
,c
)이 합쳐져서 base 브랜치에 하나의 커밋으로 추가된다.
$ git checkout feature
$ git rebase dev
$ git checkout dev
$ git merge feature
드디어 주인공 두-둥
rebase 는 말 그대로 base 를 재설정하는 것이다.
rebase 를 하면 기존 분기점이었던 base(A
)에서 가장 최신 커밋(C
)으로 base 가 설정된다.
PR 을 merge 할 때 3가지 종류 중에 선택해서 merge 할 수 있는데,
설정에서 원하는 merge 방식만 가능하도록 막아둘 수 있다!
프로젝트 컨벤션에 맞게 설정해놓고 쓰면 좋을 듯~
📎 참고
혹시 당신이 소문으로만 듣던 리베이스 마스터인가요?