[Git] branch merge 하는 방법

2024. 1. 14. 23:36개발/프론트엔드 개념

branch merge란?

merge란 현재 위치한 branch에서 다른 branch를 병합할 때 사용한다. 

특정 branch로 합치는 요청을 보내는 Pull Request(pr)을 보낼 때 Create a merge commit, Squash and merge, Rebase and merge 이 3가지 merge 방법이 존재한다. 이 방법들을 설명하기 위해서는 commit(커밋) 메세지와 commit 그래프를 어떻게 유지해야 할지 와 연관 있기 때문에 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에 있던 커밋 모두를 합쳐 하나의 커밋으로 만든다. 이는 지저분할 수 있는 커밋 히스토리들을 하나로 합쳐서 기능상 의미 있는 하나의 커밋만 남길 때 사용한다. 하지만 과도한 생략을 하게 된다면, 정확한 변경 파악이 힘들 수 있다. 특정 기능 개발 후 develop branch에 merge 하고자 할 때는 Squash and Merge가 유용할 수 있다.

Rebase & Merge

분기했던 branch의 기준을 Base로 설정하고, merge하는 방법으로 결과적으로는 git merge -ff와 같은 형태가 된다. rebase를 하면 커밋들의 Base가 변경돼 커밋 해시 또한 변경될 수 있다. 이런 경우 git pysh -f (force push)해야 할 경우도 있다. merge commit을 남길 필요가 없는 merge의 경우에 사용하면 좋다. 또한 커밋 그래프가 하나로 rebase 되기 때문에 가독성이 좋다. develop branch를 production branch로 merge 하고자 할 때는 develop branch에 분기가 남아있다면, production branch는 간결하게 유지하고자 Rebase and Merge가 유용할 수 있다.


참고 자료

https://git-scm.com/docs/git-merge

https://meetup.nhncloud.com/posts/122