[Git] 05. 다양한 merge 방법

Zero·2023년 2월 9일
0

Git

목록 보기
5/11

3-way merge

브랜치에 각각 신규 commit이 1회 이상 있는 경우

merge 명령을 내리면 두 브랜치의 코드를 합쳐서 새로운 commit을 자동으로 생성해주는데
이를 3-way merge 라고 합니다.



fast-forward merge

새로운 브랜치에만 commit이 있고 , 기준이 되는 브랜치에는 신규 commit이 없는 경우가 있습니다. 이런 경우에 merge를 하게 되면 "fast-forward merge 되었습니다." 라고 알려줍니다.

fast-forward merge가 무엇이냐면 , 딱히 합칠게 없어서 그냥 신규브랜치 보고
"지금부터 니 이름은 main 브랜치여" 하는 것입니다. 그래도 결과는 어짜피 같지 않을까요.

  • git merge --no-ff 브랜치명 해서 강제로 3-way merge 할 수도 있습니다.


🔍 만약 branch를 merge 한 이후에 삭제하고 싶다면 ?

  • git branch -d '브랜치명' 명령어를 이용하면 된다.


rebase & merge

rebase는 브랜치의 시작점을 다른 commit으로 옮겨주는 행위입니다.

  1. rebase를 이용해서 신규브랜치의 시작점을 main 브랜치 최근 commit으로 옮긴 다음
  2. fast-forward merge하는 것입니다. 이런 식으로도 브랜치 합치기가 가능합니다.


rebase를 왜 쓰는걸까 ?

  • rebase 는 그저 시작점을 최근 commit으로 옮겨 fast-forward merge 하는 것인데 굳이 왜 사용하는 걸까 ?
  1. 3-way merge 말고 강제로 fast-forward 하고 싶을 때

  2. 브랜치 그딴거 필요없이도 코드 잘짜는 고수같은 느낌을 주고 싶을 때

그러고 싶으면 일반 3-way merge 대신 rebase & merge 해도 됩니다.

3-way merge 는 log 같은 commit 내역을 출력해보았을 때 꽤나 복잡하기 때문에 단순한 merge를 할 때에는 rebase를 이용하는 경우가 많습니다.



rebase 하려면 ?

  • 새로운 브랜치로 먼저 이동한다.

  • git rebase main 하면 됩니다.

  • 그럼 브랜치가 main 브랜치 끝으로 이동하는데 그걸 fast-forward merge 하면 됩니다.



rebase 단점

  • conflict 엔딩이 많이 난다.


일반 merge 와 rebase merge 하는 법의 차이

1) 일반 merge

  • 중심 브랜치로 이동
  • git merge '새로운 브랜치 명'

2) rebase & merge

  • 새로운 브랜치로 이동
  • git rebase '중심 브랜치'
  • 중심 브랜치로 이동
  • git merge '새로운 브랜치 명'


squash & merge

모든 브랜치를 3-way merge 해버리면 나중에 참사가 일어날 수 있습니다.

  • 3-way merge 된 것들은 매우 복잡해보임

  • main 브랜치 git log 출력해보면 3-way merge된 브랜치들의 commit 내역도 다 같이 출력되어서 더러워짐

그러기 싫으면 rebase 아니면 squash and merge 하면 됩니다.


squash & merge 하는 법

squash and merge 이거 하면 어떻게 되냐면 3-way merge처럼 선으로 이어주지 않고
새 브랜치에 있던 코드변경사항들이 main 브랜치로 텔레포트합니다. 그럼 이제 main 브랜치의 git log 출력해볼 때 merge 완료된 브랜치의 commit 같은 것들은 출력되지 않습니다.

0개의 댓글

관련 채용 정보