rebase가 필요했던 상황
| 작업 내용 | 작업한 브랜치 | 머지하려는 브랜치 |
|---|---|---|
| 피드 목록 조회 API 연결 | feat/A | develop |
| 피드 개수 보여주는 부분 추가 | feat/B | feat/A |
| masonry 레이아웃 적용 | feat/C | feat/B |
develop -> feat/A -> feat/B -> feat/C 순서로 브랜치를 생성하고 3개의 PR을 올렸습니다.
develop
└── feat/A
└── feat/B
└── feat/C
뒤에서부터 차례대로 머지하면 된다고 생각할 수 있겠지만,
모든 PR의 코드 리뷰가 끝나지 않았기 때문에 순서대로 머지할 수 없었습니다.
그리고 다른 팀원의 작업을 위해서 feat/A 브랜치만 먼저 develop으로 머지되어야 하는 상황이었습니다.
이 상황에서 팀원의 도움으로 rebase를 적용해 커밋을 깔끔하게 관리할 수 있었습니다.
앞으로도 종종 쓰일 것 같아 블로그에 정리해 보고자 합니다.
rebase 순서
먼저 develop으로 머지되어야 하는 feat/A 브랜치의 PR부터 squash merge를 진행했습니다.
feat/A가 squash merge되면서 develop에 새로운 단일 커밋이 생성되었는데,
feat/B에 있던 feat/A의 개별 커밋들이 별도의 커밋으로 인식되면서 feat/B 브랜치의 Commits 수가 늘어났습니다.
이 문제를 해결하기 위해 rebase를 진행했습니다.
feat/A를develop에 머지했으니develop에서git pullfeat/B로 이동하도록git switch feat/B- 이동한 상태에서 develop 브랜치 기준으로 rebase를 진행
git rebase -i develop - GitLens를 통해
feat/BPR에서 작업한 커밋만 남겨두고 나머지는 다 drop
이때 GitLens extension을 설치하면 더 쉽게 drop이 가능합니다.
VSCode Command Palette에서 GitLens: Enable Interactive Rebase Editor설정이 필요합니다.
git push -f로 force push하면 rebase 완료
feat/BPR을 새로고침하니 Commits 수가 원래대로 줄어들었고,feat/CPR도 마찬가지로 rebase를 진행했습니다.
마치며
이렇게 rebase를 통해 브랜치 간의 의존성 문제를 깔끔하게 해결할 수 있었습니다. 특히 GitLens의 Interactive Rebase Editor를 사용하면 시각적으로 편하게 커밋을 정리할 수 있어 유용했습니다. 실제 개발에서는 이런 예상치 못한 상황들이 언제든 발생할 수 있기 때문에, 이번에 배운 방법을 잘 기억해두고 활용해야겠습니다.