브랜치를 다른 브랜치와 합치는 방법인 merge와 rebase에 대해 정리했습니다.
먼저 스터디 시나리오를 준비했습니다.
- 스터디장이 레파지토리를 만들고 (첫 번째 커밋), 1주차 정리 글을 올리기 위해 week1 폴더를 생성하고(두 번째 커밋) push 한다. -main 브랜치
- 스터디원 A, B는 week1 폴더가 생성되는 시점에 각자 브랜치(A, B 브랜치)를 생성해 정리 글을 올리고 PR을 올린다.
- 각자 발표를 마치고 스터디장이 2개의 PR 하나하나를 병합한다.
2번까지의 시나리오대로 git graph를 그리면 다음과 같습니다.
위의 상태에서 merge 방식을 이용해 A, B 브랜치를 차례로 합친다면 다음과 같이 git graph가 그려집니다.
각자 다른 환경에서 작업해 충돌이 나지 않는다고 가정합니다.
이 그래프를 분석해 보면 먼저 A 브랜치의 PR #1을 merge 하면서 Merge pull request #1 commit이 생성하게 되고, 그다음 B 브랜치의 PR #2를 merge 하면서 Merge pull request #1 commit이 발생하게 되면서 합쳐집니다.
2번 git graph 상태에서 A, B 브랜치를 합치기 전에, A 브랜치에서 추가로 edit commit을 추가합니다.
A 브랜치를 main 브랜치에 합칩니다. 이때 기존의 A 브랜치는 사라지고 기존의 main 브랜치에 일렬로 정렬되고 merge PR commit도 발생하지 않습니다.
이제 B 브랜치에서 main 브랜치를 rebase 합니다. 이때 B 브랜치는 초기에 브랜치를 생성했던 main 브랜치의 2번째 커밋이 아닌 합쳐진 A 브랜치의 마지막 커밋 다음으로 이동하게 됩니다. 따라서 B 브랜치는 원본 브랜치에 A 브랜치의 커밋들까지 가지고 있게 됩니다.
마지막으로 B 브랜치를 main 브랜치에 합칩니다. 최종적으로 기존의 브랜치들은 모두 사라지고 git tree가 일렬로 정렬됩니다.