Git merge

IT 위키
Agiler (토론 | 기여)님의 2025년 10월 15일 (수) 02:20 판 (새 문서: 깃 머지(Git merge)는 두 개 이상의 브랜치의 변경 내역을 하나로 합치는 작업이다. 즉, 별도로 개발된 브랜치들의 커밋 흐름을 하나의 브랜치에 병합하여 통합된 히스토리를 만드는 방법이다. ==개념 및 원리== 머지는 공통 조상 커밋을 기준으로 각각의 브랜치 변경사항을 비교한 뒤, 공통 조상 이후의 변경을 한쪽 브랜치(현재 브랜치)에 반영하는 방식이다. 간단한...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

깃 머지(Git merge)는 두 개 이상의 브랜치의 변경 내역을 하나로 합치는 작업이다. 즉, 별도로 개발된 브랜치들의 커밋 흐름을 하나의 브랜치에 병합하여 통합된 히스토리를 만드는 방법이다.

개념 및 원리[편집 | 원본 편집]

머지는 공통 조상 커밋을 기준으로 각각의 브랜치 변경사항을 비교한 뒤, 공통 조상 이후의 변경을 한쪽 브랜치(현재 브랜치)에 반영하는 방식이다.

간단한 예를 들어보자:

       A --- B --- C (feature)
      /
D --- E --- F (main)

위 상태에서 `feature` 브랜치를 `main` 브랜치로 병합한다고 하면:

git checkout main
git merge feature

결과적으로는:

          A --- B --- C  (feature)
        /               \
D --- E --- F ----------- M  (main)

여기서 M은 새롭게 생성된 병합 커밋이다. 이 병합 커밋은 양쪽 브랜치의 변경을 모두 포함한다.

머지 방식 및 옵션[편집 | 원본 편집]

빠른 병합(Fast-forward merge)[편집 | 원본 편집]

만약 대상 브랜치가 병합하려는 브랜치를 이미 포함하고 있다면, Git은 단순히 브랜치 포인터를 앞으로 이동시키는 **fast-forward** 방식을 사용할 수 있다. 이 경우 별도의 병합 커밋 없이 브랜치가 “이어 붙는다”.

git merge --ff-only feature

병합 커밋 없이 브랜치가 뒤따라붙는 형태가 된다.

병합 커밋 생성[편집 | 원본 편집]

병합 대상 브랜치가 공통 조상 이후로 변경이 있다면, Git은 새로운 병합 커밋을 생성한다. 이는 두 브랜치의 변경 내역을 모두 포함하는 새로운 커밋이다.

git merge feature

스쿼시 병합(Squash merge)[편집 | 원본 편집]

여러 커밋을 하나로 합쳐서 병합하고 싶을 때는 `--squash` 옵션을 사용한다. 이는 실제로는 병합(commit)을 하지 않고, 변경 사항을 staging 한 뒤 수동으로 커밋하게 한다.

git merge --squash feature
git commit

단, 이 방식은 커밋 히스토리를 병합하지 않으며 브랜치 간 관계도 유지되지 않는다.

충돌 및 해결[편집 | 원본 편집]

브랜치 간 변경 사항이 겹치면 병합 충돌이 발생한다. 이 경우 Git은 자동 병합을 멈추고 충돌 파일을 표시한다. 사용자는 충돌을 수동으로 수정한 뒤 아래 명령으로 병합을 완료해야 한다:

git add <충돌 수정한 파일>
git commit

머지를 중단하고 이전 상태로 되돌리고 싶다면:

git merge --abort

장점과 단점[편집 | 원본 편집]

장점[편집 | 원본 편집]

  • 커밋 히스토리가 정확하게 보존된다.
  • 두 브랜치의 모든 변경 내역을 반영할 수 있다.
  • 팀 협업 시 작업 내역을 투명하게 병합할 수 있다.

단점[편집 | 원본 편집]

  • 병합 커밋이 많아질수록 히스토리가 복잡해질 수 있다.
  • 잦은 충돌이 발생할 수 있으며, 특히 병렬 작업이 많을수록 충돌 관리가 어려워질 수 있다.
  • fast-forward 병합 시 브랜치 간 관계가 명확하지 않을 수 있다.

사용 예시 및 팁[편집 | 원본 편집]

  • 기능 브랜치를 `main` 브랜치에 통합할 때 유용하다.
  • `--no-ff` 옵션을 사용하여 병합 커밋을 강제로 남기면 브랜치 병합 이력을 추적하기 쉽다.
git merge --no-ff feature
  • 자주 병합하면 충돌 가능성을 줄일 수 있다.
  • 병합 전에 항상 `git fetch`로 최신 상태를 반영하고, `git status`를 확인하는 습관이 좋다.

같이 보기[편집 | 원본 편집]

참고 문헌[편집 | 원본 편집]

  • Git 공식 문서 — git‑merge 매뉴얼
  • Scott Chacon & Ben Straub, Pro Git (Apress)

각주[편집 | 원본 편집]