Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

Git 3 way merge

GIT, 20252 min read

배경

협업을 하다 보면 동료와 같은 파일을 동시에 수정하는 경우가 발생한다 이때 동료의 수정 사항이 먼저 병합(merge)되면 내가 작업하던 브랜치에서 최신 버전을 pull 했을 때 충돌(conflict)이 생길 수 있다 Goland 에서는 이러한 상황에서 자동으로 세 개의 화면을 제공해 3-way merge 방식으로 충돌을 시각적으로 비교하고 병합할 수 있도록 해줍니다 이에 따라 정확한 Git의 3-way merge 개념을 정리하고 기록하려고 합니다

3-way merge

세 개의 커밋 (공통 조상, 내 커밋, 상대 브랜치 커밋)을 비교해서 병합하는 방식

  • 이 방식은 충돌이 발생할 수 있다
  • 충돌이 발생하면 수동으로 해결하고 새로운 병합 커밋을 생성

문제가 발생하는 경우

A --- B --- C ← origin/main (최신 main 브랜치)
\
D ← 로컬 #1 브랜치 (#1) 커밋

D 에서 작업을 완료후 pull로 최신 내용을 반영시 충돌 발생 가능

A --- B --- C
\ \
D --- E ← 로컬 #1 (병합 커밋) 생성 + (origin/#1) 푸시

D 와 E 사이에 충돌 해결 후 새로운 병합 커밋 생성 후 원격 저장소에 업로드됨

A --- B --- C -------------- H ← origin/main
\ \ / (PR 병합됨)
D ---( E ← origin/#1 )

C와 E를 병합한 최종 머지 커밋

'#1' 브랜치에 있는 상태에서 원격 main을 병합 (Goland가 하는 작업은 머지?)

# 1. 로컬 #1 브랜치에 있는 상태에서
git checkout #1
# 2. 원격 main 최신 내용 가져오기
git fetch origin
# 3. feature에 origin/main을 병합
git merge origin/main
# (충돌 시 해결하고)
git commit # 충돌 없으면 자동 커밋됨

참조

https://wikidocs.net/153693

© 2025 by GwiyeomGo Tech Blog. All rights reserved.