Merge 유형 이해

고급 Git

Amanda Crawford-Adamo

Software and Data Engineer

저는 Amanda입니다

Amanda의 사진

고급 Git

git merge란?

Git merge 명령:

git merge
  • 한 브랜치의 변경을 다른 브랜치로 통합
  • 두 브랜치의 공통 기반 찾기
  • 다양한 병합 전략 사용

두 도로가 하나로 합쳐지며 두 자동차가 같은 길로 들어오는 장면

고급 Git

Fast-forward 병합

Fast forward 병합이란?

  • 단순하고 직선형 기록 유지
  • 간단한 변경의 단명 브랜치에 적합

$$

사용을 피할 때

  • 브랜치 기록을 보존해야 함
  • 장수 브랜치의 복잡한 기능 개발
  • 브랜치 간 충돌 발생 시 — fast forward는 즉시 실패!
고급 Git

Fast-forward 병합(전)

두 브랜치(main, feature)를 보여주는 그래프. main에는 커밋 2개. feature는 main 최신 커밋 이후 분기되어 커밋 1개 추가.

고급 Git

Fast-forward 병합 문법

Git 병합 Fast Forward 기본값

git checkout main
git merge feature_branch

Git 병합 Fast Forward 강제

git merge <branch> --ff-only

예시

git checkout main
git merge feature_branch --ff-only
고급 Git

Fast-forward 병합(후)

두 브랜치(main, feature)를 보여주는 그래프. main에는 커밋 3개. feature는 main 두 번째 커밋 이후 분기되어 커밋 1개 추가. main의 세 번째 커밋은 feature 최신 커밋의 복사본.

고급 Git

Recursive 병합

Recursive 병합이란?

  • 부모가 두 개인 병합 커밋 생성
  • 전체 기록 보존
  • 장수 브랜치에 적합
  • 브랜치 구조 유지

$$

사용을 피할 때

  • 단순·선형 기록을 유지하려 할 때
  • 빠르고 사소한 변경일 때
고급 Git

Recursive 병합(전)

두 브랜치(main, feature)를 보여주는 그래프. main에는 커밋 3개. feature는 main 첫 번째 커밋 이후 분기되어 커밋 2개 추가.

고급 Git

Recursive 병합 문법

Recursive 병합 명령:

git merge --no-ff <branch>

예시

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

$ git merge --no-ff feature_branch
Merge made by the 'recursive' strategy.
...
고급 Git

Recursive 병합(후)

두 브랜치(main, feature)를 보여주는 그래프. main에는 커밋 6개. feature는 main 최신 커밋 이후 분기되어 커밋 2개 추가. main의 6개 커밋은 두 브랜치 커밋이 교차된 형태. main 최신 커밋은 두 부모를 갖는 병합 커밋으로, feature 최신 커밋과 main의 직전 최신 커밋을 부모로 가짐.

고급 Git

요약

  • Fast forward 병합은 기록을 단순·선형으로 유지
  • Recursive 병합은 맥락을 보존
  • 복잡한 개발에는 Recursive 병합이 적합

Fast Forward 병합 명령

git merge <branch_name> # 기본 명령
git merge --ff-only <branch_name> # fast forward 강제

Recursive 병합 명령

git merge --no-ff <branch_name>
고급 Git

연습해 봅시다!

고급 Git

Preparing Video For Download...