Git Merge

현곤·2024년 12월 9일

Branch

  • 동일한 소스 코드에서 다른 작업을 동시다발적으로 할 수 있게 해주는 기능
    • 각자 독립적인 작업 영역 안에서 자유롭게 코드를 변경할 수 있다.
    • 분리된 작업 영역에서 변경된 내용을 추후 Merge 를 통해 통합된 새 버전으로
      만들어 낼 수 있다.

Merge

  • 기본 단위는 Branch
  • 서로 다른 브랜치를 하나의 브랜치로 합치는 과정
    • 독립적인 개발 라인을 단일 라인으로 통합할 수 있다.

브랜치와 브랜치를 합치는 과정

pull 과 헷갈릴 수 있는데, pull 은 원격 리포지토리에 있는 코드를 로컬 리포지토리에 받아오는,

즉 업데이트를 하는 개념이고 Merge 는 합치는 개념이다.

Merge 과정에서 코드 충돌이 발생하는 이유

합치려는 브랜치가 동일한 코드를 수정할 경우 발생한다.


fast - forward Merge

브랜치 포인터가 Merge 과정 없이 그저 최신 커밋으로 이동하는 방식

패스트 포워드 관계

  • 기존 브랜치와 분기한 브랜치의 관계
    • 분기한 브랜치의 커밋 히스토리가 기존 브랜치의 커밋 히스토리를 포함하고 있을 때 Fast forward 관계를 가진다.

패스트 포워드를 언제 써야하나?

  • 서로 다른 브랜치의 Base 커밋에 내용이 변경되지 않았을 때 사용된다.
    예시) 기존 main 브랜치에서 새로운 브랜치 feature 하나를 생성한 후,
    main 에서는 더 이상 커밋하지 않고, feature 에서만 커밋하는 경우에
    fast-forward 방식으로 Merge 된다.

  • 이 경우에는 Merge 커밋이 따로 만들어지지 않고 HEAD 의 위치만 이동한다.

사용 방법)

git merge {Branch}

non Fast-Forward 병합

사용 방법)

git merge --no -ff {Branch}
  • Merge 대상과 Fast-Forward 관계여도 강제로 Merge 커밋을 생성하고 병합

    	1. 브랜치에 관계 없이 필요한 커밋만 가지고 올 수 있게 된다
    	2. 어떤 브랜치에서 `Merge` 했는지 기록을 남길 수 있다.

⇒ 협업 과정에서는 기록을 남기는 것이 필요해 이 방식을 권장


3Way-merge

각 브랜치에 새 커밋이 하나 이상 있는 경우
Merge 했을 때 두 브랜치의 코드를 합쳐 새로운 커밋을 자동으로 생성해주는 것

3-way-merge 방식

  • 서로 다른 브랜치에 공통되는 Base 브랜치를 기점으로 충돌을 최소화 시키는 방법
  • 결과를 별도의 커밋으로 만들고 해당 브랜치가 그 커밋을 가리키도록 이동한다.
  • 브랜치간 병합을 진행할 때,
    Base를 기준으로 어떠한 브랜치 파일이 수정되었는지 확인할 수 있어
    충돌 문제 해결에 효과적이다.

3-way-merge 언제 써야하나?

  • 두 브랜치에서 새 커밋이 생겼을 때 사용된다.
  • 기존 Fast Forward 방식으로는 백 트래킹 없이 다른 브랜치로 이동하는 것이 어려워,
    3-way-merge 방식이 사용된다.

사용 방법)

git merge {Branch}

이런 방법이 있는지 처음 알았다.
너무 어렵다.
Git Merge

profile
코딩하는 곤쪽이

0개의 댓글