
Git을 사용하다보면 Merge와 Rebase 상황에서 충돌이 발생하는 경우가 생길 수 있다. 충돌이 일어나는 상황을 직접 만들어 본 후 문제를 해결할 것이다.
Merge와 Rebase의 충돌이 일어나는 케이스는 대부분 비슷하기 때문에 하나의 시나리오를 가지고 진행할 것이다.
시나리오 : master 브랜치와 dev 브랜치에서 같은 파일을 서로 수정한 상황
ㅇMerge

master 브랜치에 text.txt 파일을 준비한다.

파일 안에는 "hi git"이라는 내용이 담겨 있다.

브랜치를 하나 생성 해준뒤 text.txt 파일을 master에서는 "hi"로 dev1에서는 "git"으로 수정하고 commit 후 merge한다.

dev 브랜치에서 파일을 수정하고 커밋하는 과정이다.

master 브랜치도 commit 후 merge 명령어를 실행해보면 충돌이 발생했다는 에러가 발생한다.
CONFLICT (content): Merge conflict in text.txt 라인에서 text.txt 파일에 충돌이 발생했다는 걸 알 수 있다.
이제 직접 파일을 열어 수동으로 수정해줘야 한다.

파일을 열어보면 위 처럼 서로 내용이 다른 것을 확인할 수 있다.
<<<<<(현재 브랜치의 변경사항)
=====(브랜치 구분선)
>>>>>(타 브랜치의 변경사항)
이 부분의 내용을 수정해주면 충돌을 해결할 수 있다.

git status 명령어로 살펴보면 충돌이 발생했고 충돌을 해결한 후에 add와 commit을 진행하라고 한다.
add 후 commit 해준다.

commit 후
git log --oneline --graph 명령어를 사용하면 병합이 된 걸 확인할 수 있다.
ㅇRebase
마찬가지로 두 브랜치에 같은 파일을 서로 수정해준다. rebase는 커밋을 재정렬하는 것이기 때문에 브랜치를 분기 후 master에 추가로 커밋이력을 1~2개 정도 새로 남기고 진행한다.

first commit에서 브랜치를 분기한 후 master에서 2번의 커멋이력을 남긴 상태를 확인할 수 있다.

dev 브랜치로 이동 후 rebase 명령어를 입력하면 위와 같이 에러가 발생한다.
text.txt에 충돌이 발생했고 충돌을 해결한 뒤 git rebase --continue 명령어를 입력해야한다.

충돌의 내용을 확인한 후

이번에는 변경사항을 모두 적용시켜본다

status를 확인해보면 현재 rebase 중 충돌이 발생하여 멈춘 상태고 충돌을 해결하고 게속 진행하라는 내용을 확인할 수 있다.

충돌을 해결한 후 add 한다음 git rebase --continue 명령어를 입력하고 commit message를 저장하면 rebase가 완료된다.

git rebase --continue를 입력했을 때 나타나는 commit message 입력 창이다.

rebase에 성공하고 graph를 확인해보면 히스토리가 직선으로 연결되어 있는 것을 확인할 수 있다.
'Git' 카테고리의 다른 글
| Git cherry-pick 활용하기 (0) | 2024.09.23 |
|---|---|
| Git merge와 rebase의 차이 (1) | 2024.09.09 |
| Git 일단 해보기(branch 이동) (0) | 2024.09.09 |
| Git commit에 대해서 (6) | 2024.09.06 |
| Git 기초 사용법 (6) | 2024.08.30 |