본문 바로가기
Github

3. 여러 branch를 생성하고 사용해보기(merge와 rebase)

by 이쟝 2022. 3. 29.
본 포스팅은 얄팍한 코딩사전님의 제대로 파는 Git&GitHub의 유튜브영상을 학습하고 정리한 내용입니다.

 

1. 여러 branch를 만들어보기

Branch: 분기된 가지(다른 차원)

프로젝트를 하나 이상의 모습으로 관리해야 할 때) 실 배포용, 테스트 서버용,새로운 시도용

여러 작업들이 각각 독립되어 진행될 때 예) 신기능 1, 신기능 2, 코드 개선, 긴급 수정..

-> 각각의 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합해서 이 모든 것을 하나의 프로젝트 폴더에서 진행할 수 있도록!

1. 브랜치 생성 / 이동 / 삭제하기

add-coach란 이름의 브랜치 생성

git branch add-coach

 

브랜치 목록 확인

git branch

현재 브런치는 main이다!

add-coach 브랜치로 이동

git switch add-coach

브랜치 생성과 동시에 이동하기

git switch -c new-teams // new-teams이라는 브랜치를 생성하고 이동!

현재 3개의 branch가 있고 현재 branch는 new-teams이다.

*브랜치 이름 수정하고 삭제하기*

to-delete란 브랜치를 만들기

 

브랜치 이름 바꾸기

git branch -m (기존 브랜치명) (새 브랜치명)

소스트리에도 동일하게 적용된 것을 볼 수 있다.

브랜치 삭제하기

git branch -d (삭제할 브랜치명)

*지워질 브랜치에만 있는 내용의 커밋이 있을 경우, 즉 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때는 -d대신 -D(대문자)로 강제 삭제해야 한다.

git branch -D (강제삭제할 브랜치명)


2. 각각 브랜치에서 서로 다른 작업하기

1. main 브랜치

Leopards의 members에 Olivia 추가
커밋 메시지 : Add Olivia to Leopards


Panthers의 members에 Freddie 추가
커밋 메시지: Add Freddie to Panthers
꼭 저장하고 commit을 해야 한다! 아니면 아무 일도 일어나지 않는다.

 

new-teams와 add-coach 브랜치는 커밋을 하기 전이기 때문에 가지만 뻗어있는 상태


2. add-coach 브랜치

Tigers의 매니저 정보 아래 coach: Grace 추가
커밋 메시지: Add Coach Grace to Tigers

Leopards의 매니저 정보 아래 coach: Oscar 추가
커밋 메시지: Add Coach Oscar to Leopards

Panthers의 매니저 정보 아래 coach: Teddy 추가
커밋 메시지: Add Coach Teddy to Panthers

 

add-coach와 main 두 브랜치가 갈라진 것을 확인할 수 있다.

여기서 git switch main을 하게 되면 브랜치가 바뀌게 되면서 add-coach브랜치에서 설정했던 작업이 없어진다.

프로젝트는 한 폴더 안에 있지만 브랜치를 어디로 switch 하느냐에 따라서 안의 내용들이 달라지게 된다.


3. new-teams 브랜치

pumas.yaml 추가
커밋 메시지: Add team Pumas

 

jaguars.yaml
커밋 메시지: Add team Jaguars

 

총 3 브랜치(갈래)가 생겨났다.


4. 결과 살펴보기

위치한 브랜치 내에서의 내역만 보기

git log

여러 브랜치의 내역 편리하게 보기

git log --all --decorate --oneline --graph

 

소스트리에서 확인하는 게 더 보기가 좋다.


3. branch를 합치는 두 가지 방법

merge rebase
두 브랜치를 한 커밋에 이어붙인다. 브랜치르 다른 브랜치에 이어붙인다.
브랜치 사용내역을 남길 필요가 있을 때 적합한 방식 한 줄로 깔끔하게 정리된 내역을 유지하기 원할 때 적합한 방식
다른 형태의 merge도 있다. 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 게 좋다.

1. merge로 합치기

add-coach 브랜치를 main브랜치와 merge(main 브랜치로 이동하고 아래의 명령어로 병합)

git merge add-coach

 

 

merge는 새로운 하나의 commit이기 때문에 reset으로 되돌리기가 가능하다.

merge 하기 전 해당 브랜치의 마지막 시점으로 소스트리에서 되돌리기

Replace Cheetas with Panthers 마우스 오른쪽 버튼 > 이 커밋까지 현재 브랜치를 초기화

 

(병합된 브랜치는 삭제)

삭제 전 다시 git merge add-coach를 한다.(현재 main 브랜치에서)

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

 


2. rebase로 합치기

new-teams 브랜치를 main 브랜치로 rebase(new-teams 브랜치로 이동 (merge 때와는 반대))

git rebase main

 

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

main 브랜치를 열면 new-teams의 브랜치에서 했던 커밋이 없어지기 때문에 new-teamsmain 브랜치의 자리를 바꿔야 한다.

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

git merge new-teams

 

new-teams의 작업이 main 브랜치안에도 적용이 되었다.

rebase 할 때는 rebase 할 대상 브랜치로 가서 main 브랜치로 이어 붙이기를 한 다음(rebase)에 maim 브랜치에서 merge를 해주면 된다.

new-teams 브랜치 삭제(main브랜치에도 new-teams의 작업들이 저장되었기 때문)

git branch -d new-teams

 


4. 충돌 해결하기- CLI로 진행(기본)

파일의 같은 위치에 다른 내용이 입력된 상황 -> 브랜치 간 충돌!!!

상황 만들기

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

main 브랜치
Tigers의 manager를 Kenneth로 변경
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

 


1. merge 충돌 해결하기

git merge conflict-1(main 브랜치에서)로 병합을 시도하면 충돌 발생

 

현재(main branch)에서는 manager가 Kenneth이고, merge 하려는 conflict-1에서는 manager가 Deborah이다. 둘 중에 하나를 선택해야 한다!

당장 충돌 해결이 어려울 경우 merge 중단할 수 있다.

git merge --abort

 

해결 가능 시 충돌 부분을 수정(둘 중 하나를 선택: Deborah(conflict-1))한 뒤 git add .(1) git commit(2)으로 병합하면 자동으로 커밋 메시지가 뜬다.

:wq 하면 커밋완료! tigers.yaml을 꼭 저장해준다.


2. rebase 충돌 해결하기 

rebase는 각각 따로 rebase 한 뒤에 또 merge로 하기 때문에 각각 따로 충돌이 발생한다.

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

 

두 브랜치(main, conflict-2)에서 모두 Leopards의 변경이 일어난다!

충돌 부분을 수정한 뒤(conflict-2 브랜치에서 변경한 Melissa를 선택)

 git add .

아래 명령어로 충돌이 모두 해결될 때까지 반복한다.

git rebase –continue

:wq로 저장

leopards.yaml에서는 저장이 되었다.

두 브랜치(main, conflict-2)에서 모두 panthers의 변경이 일어난다!

충돌 부분을 수정한 뒤(main 브랜치에서 변경한 Shirley를 선택) git rebase --continue

Leopards에서 한 번, Panthers에서 한 번 두 브랜치를 rebase헀는데 결과에는 Edit Leopards만 추가된 이유는 충돌 해결 중 두 번째 에서는 main 브랜치의 작업(Shirely)을 선택했기 때문에 커밋으로 추가할 필요가 없기 때문이다.

main 브랜치에서 git merge conflict-2로 마무리 (rebase와 동일)

conflict-1, conflict-2 삭제

깔끔하게 main 브랜치만 남은 것을 확인할 수 있다.

다 사용한 브랜치는 바로바로 삭제하는 것이 혼란을 방지할 수 있다.


5. 충돌 해결하기 - SourceTree로 진행

1. 브랜치 만들고 merge, rebase 하기

to-merge, to-rebase 브랜치 생성
상단의 브랜치 버튼 클릭 왼쪽의 브랜치 탭에서 클릭하여 이동

 

새 브랜치 체크아웃에 체크가 되어있으면 자동으로 왼쪽 브랜치 칸에 브랜치가 만들어지게 된다.

 

main 브랜치
Tigers의 manager를 Brenda로 변경
커밋 메시지: Edit Tigers manager

to-merge 브랜치
소스트리에서 to-merge 브랜치를 두 번 클릭
Tigers의 coach를 Ruth로 변경
커밋 메시지: Edit Tigers coach

 

 

to-rebase 브랜치
소스트리에서 to-rebase 브랜치를 두 번 클릭
Tigers의 memebers에 Tyler 추가
커밋 메시지: Edit Tigers members

 

 

브랜치를 이동하며 파일 살펴보기

브랜치마다 달라진걸 확인할 수 있다.

 

to-merge 브랜치 main으로 merge
main에 위치한 뒤 to-merge 브랜치를 우클릭하여 Merge... 클릭

 

 

to-rebase 브랜치 main으로 rebase
to-rebase에 위치한 뒤 main 브랜치를 우클릭하여... 재배치 클릭
main에 위치한 뒤 to-rebase 브랜치를 우클릭하여 Merge... 클릭

 

 

main으로 이동 후 to-merge to-rebase 우클릭하여 삭제


2. merge 충돌 해결해보기

rebase는 충돌 가능시 CLI로 진행 권장(sourceTree로 하면 더 복잡하다.)

conflict 브랜치 생성(sourceTree에서)

main 브랜치
main브랜치 더블클릭 후(소스트리에서)
Tigers의 members에 Kim 추가
커밋 메시지: Edit Kim to Tigers

 

 

conflict 브랜치
Tigers의 members에 Park 추가
커밋 메시지: Edit Park to Tigers

 

 

merge 하여 충돌 해결해보기

 

main 브랜치에서 했던 Kim(Accept Current Change)선택
자동으로 커밋 메시지가 생성된다!
성공적으로 병합 완료!

 

마지막으로 conflict 브랜치 삭제!


https://www.yalco.kr/lectures/git-github/