github에 A-ToDo-Client repo를 구성하면서 branch 전략을 고민했다. git flow를 기본으로(release branch 생략) rebase를 통해 선형적인 history를 유지하기로 마음먹었다.
develop에서 master로의 첫 번째 rebase는 문제없었지만, 두 번째 rebase에서 충돌이 발생했다. master에 변경 점이 없는데 충돌이라니? 납득할 수 없었다.
git tree를 확인해 보니 develop을 master로 rebase 한 후, master가 rebase되지 않았던 걸 발견했다. 대신, develop의 history를 기반으로 새로운 commit이 생겼다. 이게 무슨 말도 안 되는 일인가! 그래서 찾아보니 github Rebase and Merge
는 git의 rebase와 다르게 동작한다고 한다.
그래서 앞으로 master는 Squash and Merge
로 병합하고, Rebase and Merge
는 feature -> develop과 같이 합쳐진 branch를 즉시 삭제할 상황이거나 develop -> feature처럼 통합 branch의 변경을 feature에 최신화할 때만 적용할 생각이다. (아무래도 Rebase and Merge
는 trunk-based flow에 적합한 방법으로 보인다)