[Git&Github] Branch Merge 방법

2026. 6. 1. 15:45·WEB

Git Merge 전략

Merge는 두 브랜치를 결합하는 작업이다.
Git은 두 개 또는 그 이상의 커밋 포인터를 받아 공통 기준 커밋을 찾으려고 시도한다.
Git은 기준 커밋을 찾는 여러 가지 방법을 가지고 있는데, 이러한 방법들을 병합 전략이라고 한다.

본격적으로 전략에 대해 얘기하기 전에 알아둘 것이 있다. 바로 HEAD이다.

 

📌HEAD

HEAD란 현재 작업중인 브랜치의 최신 커밋을 가리키는 포인터이다.
git commit을 하면, 새 커밋이 생성되고 HEAD도 자동으로 새 커밋을 가리킨다.
즉, 다음에 생성될 커밋의 부모가 누구인지를 결정하는 기준점이다.

 


📌 Fast-Forward Merge

가장 단순한 합치기 방식이다.
HEAD 포인터가 Merge 과정 없이 그냥 최신 커밋으로 이동한다.
master에서 feature를 분기한 후, master에는 아무런 커밋이 쌓이지 않은 상태에서 master 브랜치의 HEAD 포인터를 그냥 feature의 최신 commit으로 옮겨버린다.

Merge commit은 남지 않고, 히스토리가 한 줄이 된다.

 

예시

  1. feature 브랜치를 생성하여 이동
  2. $ git checkout -b <feature/...>
  3. feature 브랜치에 커밋 생성
  4. $ git commit -m "feat: 기능1 구현"
  5. master 브랜치에서 merge
  6. $ git checkout master $ git merge <feature/...>

📌 3-Way Merge

두 브랜치가 서로 다른 길로 빠질 때 사용하는 merge 방식이다.
master에서 feature을 분기한 후, master에도 새로운 커밋이 생기고 feature에도 새로운 커밋이 생긴 상태에서 "master의 최신 커밋", "feature의 최신 커밋", "공통 조상(두 브랜치가 갈라지기 전 마지막 지점)"을 비교하여 합친다.

두 줄기의 역사를 합친 새로운 Merge commit이 생성된다. 이 merge commit은 master와 feature 두 부모를 갖게 되며, 각자의 히스토리를 모두 보존한다.

 

예시

  1. feature 브랜치를 생성하고 작업
  2. $ git checkout -b <feature/...> $ git commit -m "feat: 기능2 구현"
  3. 그 사이에 master에 커밋 발생
  4. $ git checkout master $ git commit -m "..."
  5. 갈라진 두 브랜치를 merge
  6. $ git merge <feature/...>

📌 Squash and Merge

feature 브랜치에서 발생한 여러 개의 커밋을 하나의 커밋으로 합쳐 master 브랜치에 추가하는 방식이다. feature 브랜치의 지저분한 로그를 지운다.

feature의 모든 커밋이 하나로 압축되어 master에 새로운 커밋으로 붙는다. 해당 시점에서 사용자가 커밋하면, Merge commit도 생성된다.

 

예시

  1. feature에서 여러 번 커밋
  2. $ git checkout -b <feature/1...> $ git commit -m "...1" $ git commit -m "...2" $ git commit -m "...3"
  3. master로 merge할 때 squash 옵션 사용
  4. $ git checkout master $ git merge --squash <feature/1...>

💡 위에서의 커밋들을 모두 하나로 합쳐서 staging area에 올려놓는다.

  1. 합쳐진 변경사항을 하나의 커밋으로 기록 
  2. $ git commit -m "..."

💡 병합 내용이 staging area에 오른 후 커밋 명령을 내리면, 부모가 master인 최신 커밋이 생성된다.

📌 squash 옵션을 사용하면 애초에 master 한 줄기만 있었던 것처럼 나타낼 수 있으며, 자잘한 feature의 히스토리는 날라가고 딱 master와 비교하여 달라진 코드 뭉치만 가져온다는 의미이다.

참고: [🔗Git 병합 전략 옵션 및 예시]

 

'WEB' 카테고리의 다른 글

[Git] Git Flow  (0) 2026.06.01
[Git&Github] Git Branch와 Merge  (0) 2026.06.01
'WEB' 카테고리의 다른 글
  • [Git] Git Flow
  • [Git&Github] Git Branch와 Merge
eznnni
eznnni
🍀 성장하는 개발자 연습생 eznnni입니다!
  • eznnni
    개발자 연습생의 기록
    eznnni
  • 전체
    오늘
    어제
  • Eznnni's GitHub
    • 분류 전체보기 (12)
      • WEB (3)
      • FE (5)
        • HTML (1)
        • CSS (1)
        • JavaScript (0)
        • React (1)
        • Next (2)
      • BE (0)
      • 개발 (3)
        • 🛠️ 트러블슈팅 (3)
      • 💡 기타 활동 (1)
        • 텐엑스 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Next.js
    부수입 강의
    함수 컴포넌트
    react
    Web
    Server Actions
    Javascript
    express
    Sematic Tag
    PreRendering
    클래스 컴포넌트
    HTML
    트러블슈팅
    Be
    코드잇 10x
    서버 액션
    코드잇 텐엑스
    Hydration
    backend
    프로젝트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
eznnni
[Git&Github] Branch Merge 방법
상단으로

티스토리툴바