브랜치를 합칠 때 다양한 방법으로 합칠 수 있습니다.
3-way merge
브랜치에 각각 신규 commit이 1회이상 있는 경우
merge명령을 내리면 두 브랜치의 코드를 합쳐서 새로운 commit을 자동으로 생성해줍니다.
이걸 3-way merge 라고 부릅니다. 이게 merge의 기본동작방식입니다.
fast-forward merge
가끔은 새로운 브랜치에만 commit이 있고
기준이 되는 브랜치에는 신규 commit이 없는 경우가 있습니다.
이 경우 merge하게 되면 "fast-forward merge" 라고 알려줍니다.
fast-forward merge가 뭐냐면 신규브랜치보고 "지금부터 니 이름은 main 브랜치야" 하는 것입니다.
(그래도 결과는 어차피 같으니까)
그래서 "기준이 되는 브랜치에 신규 commit이 없으면" 자동으로 fast-forward merge가 발동됩니다.
이게 싫으면 git merge --no-ff 브랜치명 해서 강제로 3-way merge 할 수도 있습니다.
브랜치 삭제
3-way, fast-forward 아무렇게나 merge 해도
브랜치를 merge 하고 나면 브랜치가 자동으로 삭제되진 않습니다.
git branch -d 브랜치이름
git branch -D 브랜치이름
병합이 완료된 브랜치 삭제시엔 -d 이것만 해도 되는데
병합하지 않은 브랜치 삭제시엔 -D 해줘야 합니다.
choi와 ms 브랜치를 삭제해보겠습니다. 그리고 브랜치목록을 출력해보겠습니다.
rebase and merge
rebase가 뭐냐면
rebase는 브랜치의 시작점을 다른 commit으로 옮겨주는 행위입니다.
- rebase를 이용해서 신규브랜치의 시작점을 main브랜치 최근 commit으로 옮긴 다음
- fast-forward merge하는 것입니다.
왜 사용?
- 3-way merge말고 강제로 fast-forward 하고 싶을 때
ms라는 브랜치를 생성하고 커밋을 한번하고 rebase해보겠습니다.
단점으로는 브랜치끼리 차이가 너무 많은 경우 rebase하면 충돌이 많이 발생할 수 있습니다.
spuash and merge
모든 브랜치를 계속 3-way merge 해버리면 복잡해질 수 있습니다.
main 브랜치 git log 출력해보면 3-way merge된 브랜치들의 commit 내역도 다 같이 출력되어 더러워집니다.
이러기 싫으면 rebase 또는 squash and merge 하면 됩니다. (새로운 브랜치에 있던 commit들을 연결해주는게 아니라 떼와서 main 브랜치에 붙여주기 때문에)
squash and merge는 새 브렌치에 있던 코드변경사항들이 main 브랜치로 텔레포트합니다.
--squash 옵션을 추가하면 끝입니다.
많은 commit을 다 합쳐서 하나의 commit으로 main 브랜치에 생성해줍니다.
git switch main
git merge --squash 브랜치명
git commit -m '메세지'
그냥 merge 했을 경우
merge --squash 했을 경우
참고자료
https://codingapple.com/course/git-and-github/
'Git' 카테고리의 다른 글
Git Branch Switching, 협업순서,Commit 메시지 규칙 (0) | 2023.11.20 |
---|---|
Git push, clone, pull, pull request (0) | 2023.08.08 |
Git - branch 만들기 (0) | 2023.08.08 |
Git - add, commit (0) | 2023.08.07 |