git merge <new branch>
Fast-forward merge
main과 새로운 브랜치의 형상이 동일한 경우.
main브랜치에서 새로 A라는 브랜치로 작업 후 commit을 하고,
main브랜치는 A브랜치를 분기한 곳에서 따로 commit을 한 게 없다면
merge를 할 때, A브랜치의 내용이 그대로 main브랜치로 흡수되며 추가 commit이 발생되지 않는다.
분기는 되었으나, main 브랜치가 변화가 없었기 때문에 분기점은 동일하기에,
추가로 작업한 신규 브랜치가 main이 되어도 문제가 없다.
new | n-1 | n-2 | n-3 | n-4 |
⬇️ | ⬇️ | |||
main | m-1 | m-2 | n-3 | n-4 |
Recursive Merge
main과 새로운 브랜치의 형상이 다른 경우
main브랜치와 새로운 브랜치가 각각 commit이 되어 있어 형상이 다를 때,
병합시에는 새로운 commit이 발생된다.
시간순서대로 두개의 브랜치가 합쳐지기 때문에 commit hash에 변함이 없다.
new | n-1 | n-2 | n-3 | n-4 | ||
⬇️ | ⬇️ | |||||
main | m-1 | m-2 | n-3 | n-4 | m-5 | ms-commit |
Squash Merge
git merge --squash <new branch>
새로운 브랜치의 커밋들이 하나로 합쳐져서 병합이 된다.
이전 커밋 내용을 하나로 모아 병합이 되기 때문에
merge log가 깔끔한 장점이 있으나,
새로운 브랜치에서 커밋한 내용이 자세히 보기 힘든 점은 있다.
new | n-1 | n-2 | n-3 | n-4 |
⬇️ | ↙️ | |||
main | m-1 | m-2 | n-3,4 |
Rebase Merge
# new
git rebase <new branch>
git checkout <main branch>
# main
git merge <new branch>
새로운 브랜치에서 commit한 게 main브랜치에 배치되고, 추가 커밋없이 병합이 된다.
이때, 두 브랜치 형상의 동일 여부에 따라 fast-forward 또는 recusive merge가 진행된다.
'💻 더 나은 개발자 되기 > Git' 카테고리의 다른 글
Git Flow 브랜치 전략이란? 그리고 GitHub Flow? (0) | 2024.01.12 |
---|