Inflearn/Git

[Git - ⑥] 충돌 해결 + SourceTree에서 사용

soohykeee 2023. 5. 6. 22:17
728x90

 

[Git - ⑤] branch + merge, rebase

 

[Git - ⑤] branch + merge, rebase

[Git - ④] git reset, revert + SourceTree 사용 [Git - ④] git reset, revert + SourceTree 사용 [Git - ③] git commit [Git - ③] git commit [Git - ②] Git 설정 + 프로젝트 시작 + .gitignore [Git - ②] Git 설정 + 프로젝트 시작 + .giti

soohykeee.tistory.com

 


 

브랜치 간 충돌 해결

앞서 merge, rebase를 배웠는데 해당 부분을 실습할 때 충돌이 일어나는 예제를 실습하겠다.

실습

  1. conflict-1, conflict-2 브랜치 생성
  2. main 브랜치
    • Tigers의 manger를 Keneth로 변경
    • Leopards의 coach를 Nicholas로 변경
    • Panthers의 coach를 Shirley로 변경
    • 커밋메시지 : Edit Tigers, Leopards, Panthers
  3. conflict-1 브랜치
    • Tigers의 manager를 Deborah로 변경
    • 커밋메시지 : Edit Tigers
  4. conflict-2 브랜치 1차
    • Leopards의 coach를 Melissa로 변경
    • 커밋메시지 : Edit Leopards
  5. conflict-2 브랜치 2차
    • Panthers의 coach를 Raymond로 변경
    • 커밋메시지 : Edit Panthers

 

위의 실습을 진행하면 아래와 같이 브랜치가 생성되고, commit 된것을 확인할 수 있다.

 


 

conflict-1을 main으로 merge

main과 conflict-1을 비교해보면, 둘다 Tiger의 manager 부분을 수정했다. 그렇기에 merge를 진행하게 되면 충돌이 발생할것이다. 

main으로 merge 해줄 것이기에 switch 해준 후, merge 해주면 충돌이 일어난 것을 확인할 수 있다.

 

충돌이 난 곳인 tigers.yaml 파일을 보면 아래와 같이 충돌이 어디서 났는지, 어떻게 해결할 것인지 수정이 가능하다.

 

만약 당장 충돌을 해결하기 힘들 때는 git merge --abort  를 작성하여 merge를 중단할 수 있다.

충돌 부분을 해결하여 merge를 다시 진행하고 싶을 때는 다음과 같이 해주면 된다.
1. git add .
2. git commit

충돌 부분을 아래와 같이 해결해 준 후, git add. git commit을 진행해주면 성공적으로 merge가 된다.

 


 

conflict-2를 main으로 rebase

main과 conflict-2를 비교해보면, 둘다 Leopards, Panthers의 coach 부분을 수정했다. 그렇기에 rebase를 진행하게 되면 충돌이 발생할것이다. 

conflict-2로 switch 후, git rebase main 하게 되면 충돌이 발생하게 된다.

 

rebase 또한 충돌 해결이 어려울 경우 git rebase --abort  를 실행해주면 된다.

충돌을 해결할 수 있다면,
1. 충돌 부분을 수정
2. git add .
3. git rebase --continue

 -> 충돌이 모두 해결될 때 까지 계속 반복해주면 된다.

충돌이 2가지 이기에 위의 방식을 1번해도 다시 한번 충돌이 발생한다. 이것 또한 앞서의 방식과 동일하게 해결해주면 된다.

 

충돌 해결이 된 후, rebase 된 것을 확인할 수 있다. 이제 마지막으로 main에서 git merge conflict-2 해준 후, 이제 모두 반영이 되고 사용하지 않는 브랜치들인 conflict-1, conflict-2 모두 지워주면 된다.

 

 


 

SourceTree로 merge, rebase 사용

브랜치 버튼을 사용하여 브랜치 to-merge, to-rebase 생성

 

적당한 변경사항을 VS Code에서 작성해준 후, 소스트리에서 커밋해준다.

 

각 브랜치마다 위처럼 커밋을 하나씩 해주면 다음과 같이 브랜치에 커밋이 생성된것을 확인할 수 있다.

 


Merge

merge를 위해서 main으로 switch 한 후, to-merge에서 오른쪽 클릭 후 현재 브랜치로 to-merge 병합을 선택한다.

 


 

Rebase

rebase를 위해서 to-rebase로 switch 후, main에서 마우스 오른쪽 클릭 후, 현재 변경사항을 main에 재배치를 선택한다.

그 다음, 위에서 처럼 main으로 switch 후, to-rebase를 병합하면 다음과 같이 rebase가 된것을 확인할 수 있다.

 

마지막으로, 이제 사용하지 않는 to-merge, to-rebase 브랜치를 삭제해주면 된다.


 

SourceTree에서 충돌 해결

rebase는 GUI에서 해결하기 보다는, CLI에서 해결해주는 것이 더욱 권장된다.

그렇기에 소스트리 사용할때, merge 시 충돌이 나는 경우 해결방법에 대해 알아보겠다.

1. conflict 브랜치 생성

 

2. main 브랜치에 Tigers member에 kim 추가
3. conflict 브랜치에 Tigers member에 Park 추가
4. merge

merger하면 충돌이 발생한것을 확인할 수 있다.

충돌 사항을 해결해주기 위해서 VS Code에서 충돌을 수정해준 후 다시 커밋해주면 된다.

 

 


 

728x90