-
Git - Branch충돌 해결하기Git 2023. 7. 19. 14:35반응형
Branch충돌 해결하기
Branch를 여러개 생성 후에 Merge 를 하는 경우 각 Branch에서 수정한 내용들이 겹친다면 충돌이 발생한다.
예를 들어 main이라는 브랜치에서 A라는 파일의 내용을 수정하고
main2라는 브랜치에서 A라는 내용을 수정 후 두개의 브랜치를 merge한다면 컴퓨터의 입장에서는 어느 수정내용을 선택해야하는지 알 수가 없다. 우선 실습해보는것이 짱이니 실습을 바로 해보겠다.
1. 충돌 상황 만들기
conflict-1, conflict-2 브랜치 생성
2. 메인 Branch
Tigers의 manager를 Kenneth로 변경
Leopards의 coach를 Nicholas로 변경
Panthers의 coach를 Shirley로 변경
커밋 메시지: Edit Tigers, Leopards, Panthers3. conflict-1 브랜치
Tigers의 manager를 Deborah로 변경
커밋 메시지: Edit Tigers4. conflict-2 브랜치 1차
Leopards의 coach를 Melissa로 변경
커밋 메시지: Edit Leopards5. conflict-2 브랜치 2차
Panthers의 coach를 Raymond로 변경
커밋 메시지: Edit Panthers
Merge 충돌 해결하기
충돌 상황을 다 만든 후에 Sourcetree를 확인해보면 아래와 같다.
이제 상황은 다 만들어뒀으니 merge를 하여 확인해보자.
우선 저장소를 main으로 이동한 뒤에 merge를 하면 아래와 같다.
변동사항이 너무 많아 지금 당장 충돌 해결이 어려운경우
git merge --abort
해당 명령어를 입력한다면 merge가 종료되고 다시 main으로 돌아가게된다.
우선 변경된 내용으로 저장한 뒤 커밋으르 진행하자.
git add .
git commit커밋을 완료 한 뒤 :wq (저장하고 종료) 를 해주자.
Rebase충돌 해결하기
rebase의 경우는 각 commit의 내용을 각각 병합하는 기능이다.
지금은 경우 우선 갈색 version 의 commit내용을 병합해보자.conflict-2에서 git rebase main로 리베이스 시도하면 충돌이 발생한다.
main 에서 conflict-2브랜치로 이동해준 후 아래의 명령어를 수행하자.
git rebase main
git status 로 상태 확인
양쪽의 branch에서 leopards.yaml파일이 수정되었다고 메시지를 전달해주고 있다.
우선 충돌이난 파일로 이동 후에 변동된 내용으로 변경을하자.
커밋을 진행하라는 메시지가 뜬다.
:wq (모두 저장하기)
첫번째 갈색 version의 커밋 내용을 병합완료하였다. 이제는 노랑 version의 커밋 내용을 병합해보자.
이렇게 변동사항이 또 있다고 알려준다. 다시 충돌이 발생한 panthers.yaml파일로 이동 후
Accept Current Change를 통해 현재내용을 저장하자.
충돌을 해결 후 나머지 rebase를 진행해주자.
git add .
git rebase --continuerebase를 완료 후 main과 conflict-2의 버전을 맞춰주기 위해서 아래와 같이 실행한다면 깔끔하게 정리가 된다.
git switch main - main브랜치로 이동
git merwge conflict-2
이제 실습을 위해 생성하였던 conflict-1, conflict-2의 브랜치를 삭제 해주자
사용이 끝난branch는 혼란을 겪지 않도록 제때 지워주도록 하자
변동사항이 너무 많아 지금 당장 충돌 해결이 어려운경우 Rebase도 동일하게 아래의 명령어를 통해 중단 가능하다.
git merge --abort
해당 명령어를 입력한다면 merge가 종료되고 다시 main으로 돌아가게된다.
근데 애초에 우리가 rebase를 할때 두가지의 commit버전들을 각각 수정하여 커밋하였는데
왜 branch에는 commit하나의 내역으로 정리가 되는가?
충돌 해결 중에 두번째 내용(노란색 commit version)에서는 현재 내용(Current)을 Accept하였기 때문에 커밋으로 추가할 필요가 없기 때문입니다.
반응형'Git' 카테고리의 다른 글
Git - git push와pull (0) 2023.07.20 Git - Sourcetree로 merge, rebase하기 (0) 2023.07.19 Git - Merge 와 Rebase 차이와 실습 (0) 2023.07.19 Git - Branch 설명 및 실습 (0) 2023.07.19 Git - Revert, Reset Sourcetree로 진행 (0) 2023.07.18