브랜치에 각각 신규 commit이 1회 이상 있는 경우
merge 명령을 내리면 두 브랜치의 코드를 합쳐서 새로운 commit을 자동으로 생성해주는데
이를3-way merge
라고 합니다.
새로운 브랜치에만 commit이 있고 , 기준이 되는 브랜치에는 신규 commit이 없는 경우가 있습니다. 이런 경우에 merge를 하게 되면 "fast-forward merge 되었습니다." 라고 알려줍니다.
fast-forward merge가 무엇이냐면 , 딱히 합칠게 없어서 그냥 신규브랜치 보고
"지금부터 니 이름은 main 브랜치여" 하는 것입니다. 그래도 결과는 어짜피 같지 않을까요.
git branch -d '브랜치명'
명령어를 이용하면 된다.rebase는 브랜치의 시작점을 다른 commit으로 옮겨주는 행위입니다.
- rebase를 이용해서 신규브랜치의 시작점을 main 브랜치 최근 commit으로 옮긴 다음
- fast-forward merge하는 것입니다. 이런 식으로도 브랜치 합치기가 가능합니다.
3-way merge 말고 강제로 fast-forward 하고 싶을 때
브랜치 그딴거 필요없이도 코드 잘짜는 고수같은 느낌을 주고 싶을 때
그러고 싶으면 일반 3-way merge 대신 rebase & merge 해도 됩니다.
3-way merge 는 log 같은 commit 내역을 출력해보았을 때 꽤나 복잡하기 때문에 단순한 merge를 할 때에는 rebase를 이용하는 경우가 많습니다.
새로운 브랜치로 먼저 이동한다.
git rebase main 하면 됩니다.
그럼 브랜치가 main 브랜치 끝으로 이동하는데 그걸 fast-forward merge 하면 됩니다.
1) 일반 merge
2) rebase & merge
모든 브랜치를 3-way merge 해버리면 나중에 참사가 일어날 수 있습니다.
3-way merge 된 것들은 매우 복잡해보임
main 브랜치 git log 출력해보면 3-way merge된 브랜치들의 commit 내역도 다 같이 출력되어서 더러워짐
그러기 싫으면 rebase 아니면 squash and merge 하면 됩니다.
squash and merge 이거 하면 어떻게 되냐면 3-way merge처럼 선으로 이어주지 않고
새 브랜치에 있던 코드변경사항들이 main 브랜치로 텔레포트합니다. 그럼 이제 main 브랜치의 git log 출력해볼 때 merge 완료된 브랜치의 commit 같은 것들은 출력되지 않습니다.