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 |
