05 브랜치 병합 (VS code, SourceTree)
Branch를 병합하는데는 두 가지 방법이 있다.
1) merge 2줄의 브랜치를 한 커밋으로 이어붙이기 (이전 브랜치의 내역을 여전히 볼 수 있음, 팀플시 사용)
2) rebase 1줄의 브랜치로 연장 (2줄이 1줄로 병합되면서 이전 내역이 유지되지 않음, 팀플시 추천안함)
주의할 점은 merge시에는 main 브랜치에서 다른 브랜치로 병합해야하고
rebase의 경우에는 병합하고자하는 브랜치로 이동하여 main으로 병합해야 한다.
우리는 merge만 사용할 것이므로 rebase는 참고나 실습만 할 것!
1. merge 사용해서 병합
1) VS code 사용하기
git branch test-branch로 생성해서 브랜치를 만들어준다.
몇개의 변화를 주고 커밋을 생성해서 브랜치가 뻗어나가게 해준다. (차이점 확인하기 위해서)
다른 브랜치에 이동했다면 다시 main 브랜치로 가서 작업해야 한다.
git merge test-branch
브랜치 목록보기
git branch
병합 후 자동으로 입력된 커밋 메시지를 저장하여 마무리 해야하므로
:wq로 마무리한다.
소스트리로 가서 병합된 것 확인
merge한 커밋은 reset으로 되돌릴 수 있다.
병합되었으므로 main과 test-branch가 같이 있는 것을 마지막 커밋시점에서 확인할 수 있는데
앞으로 test-branch는 사용하지 않을 것이므로 아래 코드로 삭제해준다.
git branch -d test-branch
2) SourceTree 사용하기
브랜치 생성시에 상단의 브랜치 버튼을 클릭한다.
왼쪽의 브랜치 탭에서 다른 브랜치로 이동할 때 더블클릭하면 됨.
VS code와 마찬가지로 main 브랜치로 더블클릭하여 이동한 후 작업해야 한다.
merge할 브랜치를 우클릭하여 "현재 브랜치로 @@@ 병합"을 선택한다.
삭제할 브랜치는 우클릭하여 삭제한다.
2. rebase 사용해서 병합
1) VS code 사용하기
git branch test-branch2로 생성해서 브랜치를 만들어준다.
몇개의 변화를 주고 커밋을 생성해서 브랜치가 뻗어나가게 해준다. (차이점 확인하기 위해서)
이번에는 main 브랜치가 아닌 test-branch2로 가서 작업해야 한다.
git rebase main
소스트리에서 상태를 확인하면 가지로 뻗어나갔던 test-branch2가 main으로 흡수되어 병합하면서 test-branch2가 가장 최신 커밋에 위치해 있음을 알 수 있고 반면 main은 그 브랜치 병합전에 머물러 있다.
그래서 뒤쳐진 main을 다시 최신 커밋쪽으로 옮겨오기 위해서 다시한번 병합해준다. (중요)
먼저 main 브랜치로 이동해주고 아래 병합 명령을 시행한다.
git merge test-branch2
그리고 나서 test-branch2를 삭제한다.
2) SourceTree 사용하기
브랜치 생성시에 상단의 브랜치 버튼을 클릭한다.
왼쪽의 브랜치 탭에서 다른 브랜치로 이동할 때 더블클릭하면 됨.
VS code와 마찬가지로 병합할 브랜치로 더블클릭하여 이동한 후 작업해야 한다.
main 브랜치를 우클릭하여 "현재 변경사항을 main에 재배치"를 선택한다.
삭제할 브랜치는 우클릭하여 삭제한다.
3. merge 수행시 충돌이 일어날 경우
둘다 다른 파일이나 부분만 수정했을 경우에는 병합시 충돌이 없지만 두 개의 브랜치에서 같은 부분을 각각 다르게 수정할 경우 병합시 충돌이 일어난다.
이때 오류 메시지를 확인하고 git status로 상태를 본다.
만약 바로 해결이 어려울 시에는 아래 명령어로 merge를 중단시킨다.
git merge --abort
바로 해결이 가능한 경우 선택지에서 어떻게 진행할지 확인할 수 있다.
Accept current change
Accept incomming change
Accept both changes
Compare changes
VS code는 선택하기 쉽게 보여주므로 거기에서 원하는 변화를 선택하고 저장 후
git add ., git commit으로 병합한다.
4. rebase 수행시 충돌이 일어날 경우
이때 오류 메시지를 확인하고 git status로 상태를 본다.
만약 바로 해결이 어려울 시에는 아래 명령어로 rebase를 중단시킨다.
git rebase --abort
해결이 가능할 경우 수정 후 git add .을 해주고 아래 명령어를 입력해준다.
git rebase --continue
충돌이 모두 해결될 때까지 반복해 준다음에 main으로 브랜치를 옮겨준 후 merge하여 마무리 한다.
불필요한 branch들은 삭제해준다.