Git_branch merge 방법

송민혁·2023년 9월 15일
0

Git

목록 보기
6/6

참조 링크

목차
Branch Merge 다양한 방법들
1. Merge
2. Rebase merging
3. Squash merging


Github에서 Pull Request Merge 시 선택할 수 있는 옵션이 3가지가 있다.

Merge

git은 Merge를 할 때 각 브랜치의 마지막 커밋 두 개, 브랜치의 공통 조상 커밋 총 3개의 커밋을 비교하여 새로운 커밋을 만들어 병합을 수행합니다.

이러한 방식을 3-way merge를 수행하여 새로운 커밋을 만들어내는 것입니다.

이미지와 함께 설명드리면 merge를 하면 f2, m2, b (공통 조상 커밋)을 합쳐서 새로운 커밋을 만듭니다.

또 다른 예시)
머지에 반영되는 결과나 conflict가 생기는 경우

요약 답변
Merge 브랜치에서 사용하는 전략은 각 브랜치의 마지막 커밋 두 개와 공통 조상의 총 3개의 커밋을 이용하는 3-way merge를 수행하여 새로운 커밋을 만들어내는 것입니다.

브랜치의 히스토리르 모두 유지하면서 변경 사항을 병합할 수 있다는 장점이 있으나
커밋 히스토리가 복잡해질 수 있다. 팀이 커질수록 이 복잡성은 빠르게 증가할 가능성이 있다.


'Merge commit' 방식은 두 브랜치의 변경 사항을 모두 유지하면서 병합합니다. 이 방식을 사용하면, 각 브랜치의 변경 사항이 과거의 커밋으로 보존되고, 새로운 커밋이 추가되어 최종 병합이 완료 됩니다.

Rebase merging

Rebase의 기본 전략은 다음과 같습니다.

1. feature 브랜치로 checkout
2. master 브랜치로 rebase
3. feature 브랜치를 master로 fast-forward merge

먼저 rebase(재설정)하려는 브랜치 커밋들의 변경사항을 Patch를 만들고 어딘가에 저장한다.
그리고 이를 master 브랜치에 하나씩 적용하여 새로운 커밋을 만든다.

요약 답변
먼저 rebase(재설정)하려는 브랜치 커밋들의 변경사항을 Patch를 만들고 어딘가에 저장하고
이를 master 브랜치에 하나씩 적용(apply)하여 복사한 개수만큼 새로운 커밋을 만든다.

깨끗하고 선형적인 커밋 히스토리를 만들어 줄 수 있으나
커밋 ID들이 모두 바뀌게 되어 혼란을 초래할 수 있다. 그리고 복잡한 충돌을 야기할 수 있다.

'Rebase and Merge'는 현재 브랜치를 target 브랜치에 재위치(rebase)시킨 후 병합하는 방식이다.
이는 target 브랜치의 커밋 위로 현재 브랜치의 모든 커밋을 옮겨 놓는 것과 같다.

Squash merging

squash and merge는 rebase와 비슷해보이지만 다릅니다.
rebase는 patch한 것들을 하나 하나 새로운 커밋으로 만듭니다.
반면에 squash는 patch한 것을 하나로 뭉쳐서 새로운 커밋으로 만듭니다.

rebase)

squash)

요약 답변
rebase와 달리 squash는 patch한 것을 하나로 뭉쳐서 새로운 커밋을 만듭니다.

커밋 히스토리를 간단히 유지할 수 있다.
반면에 작업의 상세한 이력을 잃게 된다.

'Squash and Merge'는 브랜치에서의 모든 변경 사항을 하나의 커밋으로 압축하여 병합하는 방식이다. 이 방식은 각각의 커밋에서 발생한 모든 변경 사항을 병합 후에 하나의 새로운 커밋을 생성한다.

chatGPT 답변

Merge(병합): 기본 병합 전략으로, 두 브랜치의 변경 내용을 합칩니다. 이 때, 브랜치의 커밋 히스토리가 그대로 남게 됩니다.

Rebase Merge(리베이스 병합): 다른 브랜치의 변경 내용을 현재 브랜치 위로 옮겨 붙이는 방식으로, 커밋 히스토리가 깔끔해집니다. 하지만 주의가 필요하며, 팀과의 협업 시에 조심해서 사용해야 합니다.

Squash Merge(스쿼시 병합): 여러 개의 커밋을 하나로 압축하여 병합합니다. 히스토리를 깔끔하게 유지하고 코드 리뷰를 단순화하는 데 도움이 됩니다.

참조 링크
github

GitHub의 Merge, Squash and Merge, Rebase and Merge 정확히 이해하기

Git Rebase 활용하기

Git Branch Merge 다양한 방법들

0개의 댓글