본문 바로가기

깃허브

[Git] branch merge 전략

728x90

 

/* Merge 종류 */

 

PR을 올리고 담당자는 merge를 어떤 식으로 할 지 결정을 해야 한다.

사진에서 처럼 Github에서는 3가지의 Merge 전략이 있다. 

  • Merge Commit
  • Squash and merge
  • Rebase and merge

출처: https://matt-rickard.com/content/images/2022/08/squash.jpeg

/* Merge Commit*/

 

일반적으로 많이 사용되는 merge 전략이다. 

예시를 보면 feature 브랜치를 main 브랜치에 merge하고자 할 때 Git은 자동으로 새로운 merge commit을 생성합니다. merge commit은 두 브랜치의 변경 사항을 포함합니다. 따라서 두 브랜치 사이에는 충돌이 없어야 합니다.

해당 merge 전략의 장점은 두 브랜치의 history를 보존하고 조회할 수 있습니다.

/* Squash And Merge*/

https://i.stack.imgur.com/KT5N8.png

 

feature A 브랜치를 main 브랜치에 squash and merge 하고자 할 때, feature A 브랜치의 모든 커밋들이 하나의 커밋으로 압축된다. 

git checkout main
git merge --squash bugfix
git commit

 

command를 통해 하려면 위의 코드와 같이 하면 된다. squash를 하면 main 브랜치에 커밋하기 위해 git commit 을 사용한다.

해당 squash and merge 전략의 장점은 히스토리를 단순화할 수 있습니다.

 

/* Rebase and merge */

https://i.stack.imgur.com/JjTmO.png

 

두 개의 브랜치를 병합하려고 할 때, 왼쪽을 보면 우리가 첫번 째가 다루었던 'merge and commit' 이다. 

rebase and merge를 이용한다면 보라색 브랜치를 노란색 브랜치의 최신 커밋 위로 옮긴다. (커밋들은 그대로 보존한다)

rebase and merge는 커밋 히스토리가 한 줄로 정리되어 프로젝트 히스토리 조회가 편리합니다. 

rebase and merge는 커밋의 해시 값을 변경하므로 주의해야 한다.

728x90