취미부자 개발자 로즈🌼
작성일
2024. 1. 12. 15:54
작성자
로즈♡
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가 진행된다.