git/github(6)

clouood·2023년 12월 30일
0

git/github

목록 보기
6/9
post-thumbnail

[브랜치 충돌 해결하기]

브랜치 간 충돌

  • 파일의 같은 위치에 다른 내용이 입력된 상황
    -> 컴퓨터는 어떤 수정 내역을 받아들여야 하는지 모름.



[충돌 상황 만들기]


1. conflict-1, conflict2 브랜치 생성

2. main 브랜치

  • tottenham.yaml의 manager를 '조제 무리뉴'로 변경
  • liverpool.yaml의 coach를 '젤리코 부바치'로 변경
  • manU.yaml의 coach를 '라이언 긱스'로 변경

커밋 메시지 : Edit tottenham, liverpool, manU


3. conflict-1 브랜치

  • tottenham.yaml의 manager를 '누누 산투'로 변경

커밋 메시지 : Edit tottenham


4. conflict-2 브랜치 1차

  • liverpool.yaml의 coach를 '욘 악터버그'로 변경

커밋 메시지 : Edit liverpool


5. conflict-2 브랜치 2차

  • manU.yaml의 coach를 '마이클 캐릭'으로 변경

커밋 메시지 : Edit manU

소스트리에서 보면 이런 상태.

[merge 충돌 해결하기]

여기서 merge를 해보자.
git merge conflict-1로 병합을 시도하면 충돌 발생.

충돌 발생.
현재의 브랜치에서는 이렇게 말하던데...(초록색 부분)
merge한 브랜치에서는 저렇게 말하네(파란색 부분)
둘 중에 뭘 선택할까?라고 함.



만약, main 브랜치의 내용을 고수하겠다면
초록색 부분 위의 '현재 변경 사항 수락' 클릭.

  • 오류메시지와 git status 확인
  • vscode에서 해당 부분 확인



만약, 충돌된 부분이 워낙 많아서 해결이 어려울 경우,
아래의 명령어로 merge 중단.
git merge --abort
이렇게 하면 merge가 중단되고 평온한 main의 상태가 됨.



다시 conflitc-1을 merge하면,
충돌이 발생. 충돌을 해결한 후에
git add .와 git commit으로 병합 완료.


커밋 메시지는 이미 만들어져 있음. ctrl + w 누르고 나오기.

소스트리에서 확인하면, 아까 갈라져 있던 애들이 잘 합쳐져 있음.

[rebase 충돌 해결하기]


conflict-2 브랜치로 이동 후, rebase 해주면
오류가 뜸.
두 브랜치에서 동시에 이 파일을 수정하려고 한다는 경고. 해결해달라는 것.

일단 충돌이 발생한 파일에 들어가서, 이번엔 '수신 변경 사항 수락'을 누르고 저장.

해결 가능 시

  • 충돌 부분을 수정한 뒤 git add .
  • 아래 명령어로 계속
    git rebase --continue


↓ ctrl + w로 빠져 나오기.

  • 충돌이 해결될 때까지 반복


충돌이 하나 더 발생함.

마찬가지로 충돌난 파일에 들어가서 이번엔 '현재 변경 사항 수락'을 누른 뒤, 저장.
git add .와 git rebase --continue를 통해서 해결.

해결 완.


소스트리에서 보면 main 브랜치가 뒤처져 있음.


나뭇가지의 맨 끝에, 최신 커밋에 위치함.

conflict-1, conflict-2 브랜치 삭제하기.

깔끔하게 main만 남아있음.

결론 : 다 사용한 브랜치는 제때 지워주기. 그래야 혼란 없다. 
profile
雲外蒼天

0개의 댓글