⚙️ Devops/⛏ Git

[GitLab] Merge 정책 3가지 이해하기

iseunghan 2021. 7. 26. 13:17
반응형


GitLab의 Merge 3가지 정책에 대해서 배워보겠습니다.

 

Merge Request - Merge 정책 3가지

  • Merge Commit
  • Merge Commit with semi-linear history
  • Fast-Forward merge

 

 


현재 커밋 로그 (가정)

현재 커밋 로그가 위 사진과 같다고 생각해보고 3가지 정책을 실행해 보도록 하겠습니다.

 

 


1. Merge Commit

우리가 흔히 알고 있는 Merge 입니다.

  • 특징
    • commit history 모양에 상관없이 항상 Merge가 허용됩니다.
    • 항상 새로운 commit을 생성하면서 Merge가 이뤄집니다.
  • 장점
    • 어디서 branch가 갈라졌고, 어디서 합쳐졌는지 빠짐없이 기록됩니다.
    • 전체 작업의 정확한 history를 볼 수 있습니다.
  • 단점
    • 개발 규모가 커지면 history가 엄청나게 복잡해집니다.

develop 브랜치에서 Func-A 브랜치를 머지하게 되면, 새로운 커밋이 생성되고 Merge가 이루어지게 됩니다.

 

 


2. Merge commit with semi-linear history

이 정책은 커밋 히스토리가 마치 semi-linear(직선) 하다고 해서 붙여진 이름이라고 합니다.

  • 특징
    • Fast-forward Merge가능한 경우에만 Merge를 허용합니다.
    • 하지만, 실제로는 1번 정책과 같은 새로운 commit을 생성하여 Merge가 이뤄집니다.
  • 장점
    • semi-linear 한 형태의 히스토리가 깔끔하게 남기 때문에 한눈에 알아보기 편합니다.
  • 단점
    • Merge가 허용되지 않을 때는, Rebase 작업을 해줘야합니다.

 

Merge가 허용된 경우

1번 정책과 결과물 같음.

 

Merge가 허용되지 않는 경우

현재 상황은 Fast-Forward가 불가능하기 때문에 Merge가 허용이 되지 않습니다.

이때 필요한 작업이 바로 Rebase 입니다.

 

Rebase 하기

Rebase는 출발점을 재설정하다 라는 의미를 가집니다.

Func-B 브랜치를 develop 브랜치 뒤로 rebase 작업을 진행한 결과입니다.

이렇게 되면 이제 Fast-Forward Merge가 가능해졌고, 아래와 같이 Merge가 실행될 것입니다.

 

 


3. Fast-Forward Merge

  • 특징
    • Fast-Forward가 가능한 경우에만 Merge를 허용합니다.
    • 실제 MergeFast-Forward 방식으로 진행됩니다.
  • 장점
    • 완벽한 일직선의 history로 정말 깔끔합니다.
  • 단점
    • 어디서 branch가 갈라졌고 합쳐졌는지 알 수 없습니다.
    • Merge가 허용되지 않을 경우에 마찬가지로 Rebase를 해줘야 합니다.

 

반응형