본문 바로가기

Git

Git-Merger,Rebase

서로 다른 브랜치를 합치는 두 방식

merge : 두 브랜치를 한 커밋에 이어붙입니다.

브랜치 사용내역을 남길 필요가 있을 때 적합한 방식입니다.

다른 형태의 merge에 대해서도 이후 다루게 될 것입니다.

 

rebase : 브랜치를 다른 브랜치에 이어붙입니다.

한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합합니다.

이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋습니다.

 

1. merge로 합치기

add-coach 브랜치를 main 브랜치로 merge

main 브랜치로 이동

아래의 명령어로 병합

 

git merge add-coach

 

:wq로 자동입력된 커밋 메시지 저장하여 마무리

소스트리에서 확인

 

merge는 reset으로 되돌리기 가능

merge도 하나의 커밋

merge하기 전 해당 브랜치의 마지막 시점으로

 

병합된 브랜치는 삭제

삭제 전 소스트리에서 add-coach 위치 확인

 

git branch -d add-coach

 

 

2. rebase로 합치기

new-teams 브랜치를 main 브랜치로 rebase

new-teams 브랜치로 이동

🛑 merge때와는 반대!

아래의 명령어로 병합

 

git rebase main

 

소스트리에서 상태 확인

main 브랜치는 뒤쳐져 있는 상황

 

main 브랜치로 이동 후 아래 명령어로 new-teams의 시점으로 fast-forward

 

git merge new-teams

 

new-teams 브랜치 삭제

 

 

 

 

브랜치 간 충돌

파일의 같은 위치에 다른 내용이 입력된 상황

상황 만들기

conflict-1, conflict-2 브랜치 생성

 

main 브랜치

Tigers의 manager를 Kenneth로 변경

Lions의 coach를 Nicholas로 변경

Panthers의 coach를 Shirley로 변경

커밋 메시지: Edit Tigers, Lions, Panthers

 

conflict-1 브랜치

Tigers의 manager를 Deborah로 변경

커밋 메시지: Edit Tigers

 

conflict-2 브랜치 1차

Lions의 coach를 Melissa로 변경

커밋 메시지: Edit Leopards

 

conflict-2 브랜치 2차

Panthers의 coach를 Raymond로 변경

커밋 메시지: Edit Panthers

 

 

 merge 충돌 해결하기

git merge conflict-1로 병합을 시도하면 충돌 발생

 

오류 메시지와 git status 확인

VS Code에서 해당 부분 확인

 

당장 충돌 해결이 어려울 경우 아래 명령어로 merge 중단

                                                                 git merge --abort

 

해결 가능 시 충돌 부분을 수정한 뒤 git add ., git commit으로 병합 완료

 

위<<<<<head 위에 어떤 데이터로 병합할 지 선택해야한다.

 rebase 충돌 해결하기

conflict-2에서 git rebase main로 리베이스 시도하면 충돌 발생

오류 메시지와 git status 확인

VS Code에서 해당 부분 확인

 

git rebase --abort

 

당장 충돌 해결이 어려울 경우 아래 명령어로 merge 중단

 

 

해결 가능 시

충돌 부분을 수정한 뒤 git add .

아래 명령어로 계속

 

git rebase --continue

 

충돌이 모두 해결될 때까지 반복

 

main에서 git merge conflict-2로 마무리

conflict-1, conflict-2 삭제

'Git' 카테고리의 다른 글

Git-3가지 공간  (0) 2022.05.09
Git-GitHub  (0) 2022.05.07
Git-branch  (0) 2022.05.06
Git-Commit ,Reset,Revert  (0) 2022.05.06
Git-gitignore  (0) 2022.05.06