Git에서 branch merge 방법들과 각 방법의 특징

Jeris·2023년 4월 9일
0

코드잇 부트캠프 0기

목록 보기
14/107

branch merge란

현재 branch에서 다른 branch를 합칠 때 사용합니다.

특정 branch로 합치게 해달라고 요청하는 pr(pull request)에도 아래와 같이 세 가지 merge 방법 중 하나를 선택할 수 있습니다.

왜 이렇게 다른 세 가지 방법 중 하나를 선택할까요? 커밋 메세지, 커밋 그래프를 어떻게 유지해야 할지와 연관되어 있기 때문입니다. 세 가지 merge 방법의 특징을 아래에서 살펴 볼게요.

Merge

  • 일반적으로 많이 사용하는 merge 방법이며, 커밋 이력을 모두 남길 때 사용합니다.
  • 장점이자 단점은 모든 커밋과 분기했던 branch 히스토리가 남는다는 점입니다.

Fast-forward 설정이란?

git merge 는 —ff 옵션(fast-forward)이 기본으로 설정되어 있는데, 이는 Base 브랜치가 이후 변경 내용이 없는 최신 브랜치일 경우 병합한다는 커밋 없이 합치고, 그렇지 않을 경우 병합 커밋을 남기고 합칩니다.(참고)

Github의 Merge pull request는 git merge -—no-ff 옵션으로 Base 브랜치가 최신 브랜치라 할지라도 커밋을 남기도록 강제 합니다.

Squash & Merge

  • git merge 에 -squash 옵션을 추가한 방법입니다.
  • 분기했던 branch에 있던 내용 a, b, c 커밋을 모두 합쳐 하나의 새로운 커밋을 만듭니다.
  • 지저분한 커밋 히스토리들을 하나로 합쳐서, 기능상 의미있는 하나의 커밋만 남길 때 사용합니다.
  • 잘못 사용해 과도한 생략을 하게 되면, 추후 변경 파악이 힘들 수 있습니다.

Rebase & Merge

  • 분기했던 branch의 기준을 최신 Base로 설정하고, merge하는 방법입니다. 결과적으로는 git merge -ff 와 같은 형태가 됩니다.
  • rebase를 하면 커밋들의 Base가 변경돼 커밋 해시 또한 변경 될 수 있습니다. 이런 경우 git push -f (force push)해야할 경우도 있습니다.
  • 머지 커밋을 남길 필요가 없는 merge의 경우 사용하면 좋습니다.
  • 커밋 그래프가 하나의 라인으로 그려져 가독성에 좋습니다.

언제 어떤 걸 사용할까?

branch 전략에 따라 달라질 수 있고, 아래는 Git Flow를 기준으로 얘기한 내용입니다.

  • 특정 기능 개발 후 develop branch에 merge하고자 할 때는 Squash and Merge가 유용할 수 있습니다.
  • develop branch를 production branch로 merge하고자 할 때는 develop branch에 분기가 남아있다면, production branch는 간결하게 유지하고자 Rebase and Merge가 유용할 수 있습니다.

참고

profile
job's done

0개의 댓글