Merge vs Rebase: 충돌이 일어난 이유와 해결하는 방법

2025. 11. 10. 16:47·데이터 분석/04. Git

merge와 rebase가 매번 순조롭지는 않습니다

그래서 이번에는 엽합시 발생하는 충돌에 대한 해결 방법을 배워보겠습니다


1. merge 에서 발생한 충돌 해결하기 : 같은 파일 같은 폴더가 저장 내용이 다를 때

우선 

1. conflict-1과 conflict-2라는 브랜치를 생성

2. main브랜치에서 tigers의 매니저 Kenneth로 변경

3.conflict-1에서는 tigers의 매니저를 Deborah로 변경

 

그럼 지금 tigers파일은 같은 위치에 있는 코드에 서로 다른 내용을 작성한 상태입니다

이상태에서 main브랜치에 conflict-1 브랜치를 merge 하면 다음과 같은 에러가 나타납니다

 

병합중 충돌이 발생했으니 이를 해결한 다음 커밋하라는 거죠 

그리고 tigers 파일은 아래와 같이 수정되어 있습니다 

main브랜치에서 작성한 Kenneth와 conflict-1브랜치에서 작성한 Deborah가 둘다 나와 있죠

그리고 충돌이 난 부분에 하이라이트와 추가 설명 등이 표시되어있음을 확인할 수 있습니다

지금은 충돌이 난 상황에 대해서 git이 결정할 수 없기 때문에 해당 코드를 어떻게 처리할지 사용자에게 결정을 요구한 것입니다

 

이 상태에서 git status를 보면 

tigers 파일의 같은 부분이 모두 수정되어 충돌이발생했음을 알 수 있고,

위에는  이를 해결한 다음 커밋을 하거나 --abort 옵션을 이용해서 병합을 중지할 수 있다고 알려주고 있습니다

 

방법1) git merge --abort

충돌을 당장 해결하기 곤란한 상황일 때 merge를 중단하는 명령어

 

방법2) 문제를 해결하고 merge를 재진행

경고가 나타난 부분의 위를 보시면 어떤 것을 수정할 것인지 선택하는 칸이 나오게됩니다

이 중에 선택을 하거나 완전히 다른 내용을 작성한 후, 충돌을 종식시키고 병합과정을 완료하면 됩니다

저는 tigers의 매니저 이름을 Totoro라고 변경하겠습니다 

그 이후 아래 명령어를 실행하면 됩니다

git add .
git commit

그럼 커밋 메시지 창이 나옵니다

그럼 이렇게 충돌이 해결되고 병합이 완료된 것을 확인할 수 있

마지막으로 conflict-1 브랜치의 역할이 끝났으니 이 브랜치를 제거하면 됩니다

git branch -d conflict-1


2. rebase에서의 충돌 해결하기

현재는 conflict-2브랜치에 2개의 커밋을 생성해놓은 상태입니다 

이번에는 rebase를 이용해  브랜치를 합쳐봅시다

재배치 작업은  잔가지에서 진행해야하기 때문에 conflict-2로 switch해주겠습니다

 

leopards 파일의 코치는 Melissa, panthers 파일의 코치는 Raymond로 수정된  상태인데 

이 브랜치의 두 커밋은 각각 main브랜치와 충돌을 일으킬 겁니다

git rebase main

그럼 아래와 같이 옮겨 붙여지는 첫번째 마디에서 발생하는 충돌이 표시되는데요

이렇게 rebase의 충돌은 각 마디의 것을 하나씩 해결해야 합니다

방법 1) 당장 해결이 어려울 경우

git rebase --abort

 

방법 2) 해결 가능할 경우

(leopards 파일에서는 main브랜치의 변경 사항을 선택!)

충돌 부분을 수정한 뒤 

git add .

충돌 때문에 중지된 재배치 과정을 계속 진행하도록 명령 

git rebase --continue

그럼 이제 다음으로 재배치될 파일로 넘어갑니다

(panthers 파일에서는 conflict-2의 변경 사항을 선택해서 수정!)

충돌 부분의 내용을 수정하고, 아래 명령어를 실행

git add .
git rebase --continue

충돌이 발생한 특수한 상황이므로 여기서는 커밋 메시지를 작성하는 에디터 모드가 나타납니다 

커밋을 완료하면 아래와 같이 브랜치가 잘 이어붙여진 것을 볼 수 있습니다


3. 왜 rebase에서 커밋이 하나만 된거지?

커밋이 두개였는데 하나만 재배치된 것이 보이시죠

 

우리가 앞에 변경 사항을 수정할 때 leopards파일은 main브랜치의 변경 사항을 선택했고

panthers 파일은 conflict-2파일의 변경 사항을 선택할 것 기억하시나요?

 

main브랜치의 변경사항을 선택한 결과

main브랜치의 마지막 커밋으로부터 추가적인 변경 사항이 만들어지지 않았기 때문에

커밋으로 추가할 것이 없어진 겁니다.

 

반면 panthers 파일은 conflict-2 의 변경 사항을 선택하여 수정했기때문에

그에 대한 추가 커밋이 만들어진거죠^^

 

여기서 우리가 알아야하는 것은 rebase는 가지가 항상 그 모습 그대로 이어붙여지는 것이 아닌

우리의 선택으로 변경될 수 있다는 것을 알아야합니다!


마지막으로 main브랜치를 맨 위로 올리고

git switch main
git merge conflict-2

사용을 다한 conflict-2 브랜치는 삭제해줍니다

git branch -d conflict-2

'데이터 분석 > 04. Git' 카테고리의 다른 글

Git 병합 방식 비교: Merge vs Rebase  (0) 2025.11.10
Git branch 첫걸음 : 생성, 삭제, 이름 변경  (0) 2025.11.09
SourceTree로 커밋해보기  (0) 2025.11.05
다른 버전으로 돌아가는 방법 3가지(reset, revert, checkout)  (0) 2025.11.05
새로운 버전 만들기  (0) 2025.11.05
'데이터 분석/04. Git' 카테고리의 다른 글
  • Git 병합 방식 비교: Merge vs Rebase
  • Git branch 첫걸음 : 생성, 삭제, 이름 변경
  • SourceTree로 커밋해보기
  • 다른 버전으로 돌아가는 방법 3가지(reset, revert, checkout)
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    DENSE_RANK
    이행성
    코딩테스트
    revert
    쿼리테스트
    tableau
    코테
    ROW_NUMBER
    SQL
    코드잇스프린트후기
    AARRR
    Reset
    streamlit
    cross_join
    프로그래머스
    rank
    git
    tableaubootcamp
    윈도우함수
    solvesql
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
Merge vs Rebase: 충돌이 일어난 이유와 해결하는 방법
상단으로

티스토리툴바