git에서 branch를 merge하는 방법

milmil·2023년 10월 26일
0

1. Basic Merge / Three-Way Merge / Automatic Merge

이 세 개의 용어는 git에서 근본적으로 같은 merge 과정을 말한다. 하나의 브랜치에서 바뀐부분을 가져오고, 다른 브랜치와 합치는 것도 해당된다.

두 브랜치 사이에서 충돌이 발생할 때, Git은 three-way merge를 실행한다.

그리고 three-way merge는 브랜치의 공통의 조상과 각 브랜치의 변경 사항을 고려하여 가능한곳의 충돌을 자동으로 해결한다.

이 merge 프로세스의 결과는 두 브랜치의 변경 사항을 합치는 새로운 commit 메시지이다.

그리고 merge commit은 일반적으로 각각의 브랜치에서 하나씩 가져온 두 개의 부모 commit을 가지고 있다.

이 merge는 git merge 명령어로 실행된다.

이 용어들은 같은 개념을 의미하기 때문에 자주 상호교환적으로 사용된다.

이 프로세스에는 common ancestor(공통 조상), the source branch(소스 브랜치), the target branch(대상 브랜치) 라는 세 가지 주요 요소가 포함되므로 ‘Three-way merge’라는 용어가 사용된다.

2. Fast-Forward Merge

대상 브랜치를 소스 브랜치의 끝으로 직접 업데이트할 수 있을 때 발생하는 기본 병합의 한 유형이다. 이 경우 새 merge commit이 생성되지 않는다.

소스 브랜치가 생성된 이후 대상 브랜치에 새 커밋이 없을 때 발생한다. 결과적으로 브랜치는 단순히 새 commit을 가리키게 된다.

Use Case

  • 독립적으로 개발 중이지만 이제 메인 브랜치에 통합할 준비가 된 기능 브랜치가 있는 경우 사용한다.
  • 기능 브랜치가 생성된 이후 메인 브랜치에 새로운 커밋이 없는 경우 사용한다.
  • 브랜치가 갈라진 경우에는 사용 불가하다.

Scenario

cssCopy code
A---B---C---D (main)
           \
            E---F (feature-branch)

Fast-forward merge:

cssCopy code
A---B---C---D---E---F (main, feature-branch)

+ Basic Merge와 Fast-Forward Merge의 차이점

basic merge는 새 merge commit을 항상 생성하지만, fast-forward merge는 그렇지 않다.

3. Rebase

Use Case

  • 선형적(직선)이고 더 깨끗한 commit history를 만들고 싶을 때 사용한다.
  • 여러 개의 작고 점진적인 commit이 있는 기능 브랜치를 하나의 기능 브랜치로 결합하고 싶을 때 사용한다.

Scenario

cssCopy code
A---B---C (main)
     \
      D---E---F (feature-branch)

Rebase:

cssCopy code
A---B---C---D'---E'---F' (main, feature-branch)

Scenario를 보면 D, E, F commit들이 main 브랜치로 선형적이고 더 깨끗한 history를 만들면서 rebase된 것을 알 수 있다.

4. Squash Merge

Use Case

  • 기능 브랜치의 모든 변경사항을 대상 브랜치(targe branch)에 대한 하나의 포괄적인 commit으로 결합하고 싶을 때 유용하다.
  • commit history를 깔끔하고 간결하게 유지하도록 돕는다.

Scenario

  1. 여러개의 작고 점진적인 commit이 있는 기능 브랜치(feature-branch)가 있다고 가정해보겠다.
cssCopy code
A---B---C (main)
     \
      D---E---F (feature-branch)
  1. commit history를 더 간단하게 만들기 위해서, feature-branchmain 브랜치에 squash merge하기로 한다.
cssCopy code
A---B---C---G (main)
  1. G commit은 feature-branch 의 모든 변경사항(D, E, F)을 단 하나에 커밋에 합친다.

5. Octopus Merge

Use Case

  • 한 번에 여러개의 브랜치들을 하나의 대상 브랜치에 merge하고 싶을 때 사용된다.
  • 다양한 기능 브랜치나 함께 merge 되어야 하는 다른 브랜치들을 가지고 있을 때 도움이 된다.
profile
You can't change yourself if you don't know about yourself.

0개의 댓글