[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를 배웠는데 해당 부분을 실습할 때 충돌이 일어나는 예제를 실습하겠다.
실습
- conflict-1, conflict-2 브랜치 생성
- main 브랜치
- Tigers의 manger를 Keneth로 변경
- Leopards의 coach를 Nicholas로 변경
- Panthers의 coach를 Shirley로 변경
- 커밋메시지 : Edit Tigers, Leopards, Panthers
- conflict-1 브랜치
- Tigers의 manager를 Deborah로 변경
- 커밋메시지 : Edit Tigers
- conflict-2 브랜치 1차
- Leopards의 coach를 Melissa로 변경
- 커밋메시지 : Edit Leopards
- 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에서 충돌을 수정해준 후 다시 커밋해주면 된다.