Inflearn/Git

[Git - ⑤] branch + merge, rebase

soohykeee 2023. 5. 6. 21:09
728x90

 

[Git - ④] git reset, revert + SourceTree 사용

 

[Git - ④] git reset, revert + SourceTree 사용

[Git - ③] git commit [Git - ③] git commit [Git - ②] Git 설정 + 프로젝트 시작 + .gitignore [Git - ②] Git 설정 + 프로젝트 시작 + .gitignore [Git - ①] Git? + Window 세팅 (Git Bash, Source Tree) + CLI, GUI ? [Git - ①] Git? + Windo

soohykeee.tistory.com

 


 

Branch

branch는 가지라는 뜻을 가진 분기된 가지라는 것이다. 다음과 같은 상황에서 브랜치를 사용한다.

  • 프로젝트를 하나 이상의 모습으로 관리해야 할 때 (배포 서버용, 테스트 서버용, 새기능용 등..)
  • 여러 작업들이 각각 독립되어 진행될 때 (기능1, 기능2, 버그수정, 긴급수정 등..)

즉, 각 브랜치를 기능별로 구분해놓고 각 브랜치에서 기능별로 개발을 해주는 것이다. 그러다 개발이 완료된 브랜치별로 main 브랜치에 push 해주는 것이다.

 


 

branch 생성

현재 해당 프로젝트에서 coach를 추가해주는 기능을 개발한다고 가정해보자. 그렇다면 branch로 add-coach를 생성해준 후, 해당 브랜치에서 개발을 해야한다. 

생성 : git branch add-coach
조회 : git branch
이동 : git switch add-coach

위에서 부터 순서대로, add-coach 브랜치 생성, 조회, 그리고 이동까지 되는 것을 확인할 수 있다.

기존에는 switch로 브랜치 이동이 아니라 checkout을 통해 이동했지만, 현재는 checkout, switch, restore로 분리되서 사용된다.

 

branch 생성과 동시에 이동

git switch -c new-teams  ->  new-teams 라는 브랜치가 생성이 되고, 해당 브랜치로 이동도 한다.

 

branch 이름 수정 및 삭제

git branch -m (기존 브랜치명) (새 브랜치명) -> 이렇게 작성해주면 branch 명이 변경된다.

 

git branch -d (삭제할 브랜치명)  ->  이렇게 작성해주면 branch가 삭제된다.

* git branch -D (삭제할 브랜치명)   ->  이렇게 대문자로 작성하면 강제 삭제하게 된다.

 


 

각 브랜치마다 커밋해주기

이번에는 각 브랜치마다 실습을 통해 커밋을 해줄 것이다.

  • main 브랜치
    • lepards의 members에 Olivia 추가 / 커밋 메시지 : Add Olivia to Leopards
    • panthers의 members에 Freddie 추가 / 커밋 메시지 : Add Freddie to Panthers
  • add-coach 브랜치
    • tigers의 매니저 정보 아래 coach: Grace 추가 / 커밋 메시지 : Add Coach Grace to Tigers
    • leopards의 매니저 정보 아래 coach: Oscar 추가 / 커밋 메시지 : Add Coach Oscar to Leopards
    • panthers의 매니저 정보 아래 coach: Teddy추가 / 커밋 메시지 : Add Coach Teddyto Panthers
  • new-teams 브랜치
    • pumas.yaml 추가 / 커밋 메시지 : Add team Pumas
    • jaguars.yaml 추가 / 커밋 메시지 : Add team Jaguars

 

위의 실습을 해준 후, SourceTree를 확인해보면 아래와 같이 branch가 생성되고, 거기서 작업이 이루어진 것을 확인할 수 있다.

 

git log --all --decorate --oneline --graph  ->  이렇게 작성하면 터미널에서도 확인이 가능하다.

 

 


 

merge, rebase

앞서 여러 branch가 생성된 것을 볼 수 있다. 이제 해당 branch들을 main에 합치는 방법을 알아볼 것이다.

우선 서로 다른 브랜치를 합치는 방식은 2가지가 존재한다.

  • merge : 두 브랜치를 한 커밋에 이어붙인다.
    • 브랜치 사용 내역을 남길 필요가 있을 때 적합한 방식이다.
  • rebase : 브랜치를 다른 브랜치에 이어붙입니다.
    • 한줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합하다.
    • 만일 협업을 한다면, 팀원과 공유된 커밋들에 대해서는 rebase하지 않는 것이 좋다.

 


 

실습

merge

add-coach의 브랜치를 main 브랜치로 merge 해줄 것이다. merge는 합쳐줄 브랜치로 이동해서 작업해줘야한다.

1. main 브랜치로 이동
2. git merge add-coach 로 병합

아래에서 확인해보면 add-coach가 main으로 merge 된 것을 확인할 수 있다.

즉, 현재 main에서는 add-coach에서 했던 작업이 모두 반영이 된것이다. 그렇기에 이제 더이상 add-coach 브랜치는 사용하지 않고, 더 이상 가져올 정보도 없기에 삭제해줘도 된다.

만약, merge를 reset하게 되면 어떻게 될까?

merge는 하나의 새로운 commit이기에 해당 commit을 reset 하게 되면 그 전 상태로 돌아간다.

확인 했으니 다시 merge 해준다.

또한 앞서 말한것처럼 더이상 add-coach는 사용하지 않기에 delete 해주면 된다.

git branch -d add-coach


 

rebase

new-teams의 브랜치를 main으로 rebase 해줄 것이다. 여기서는 merge 때와는 반대로 합쳐주는 브랜치로 이동해서 rebase 해줘야 한다.

1. new-teams 브랜치로 이동
2. git rebase main 로 병합

 

new-teams가 main에 rebase가 되어서 한줄로 된 것을 확인할 수 있다. 아래의 branch들을 보게되면 main과 new-teams가 현재 있는 위치가 다르다. 그렇기에 만약 git switch main 해주게 되면, new-teams에서 수행했던 작업들이 반영이 되지 않은 것을 확인할 수 있다. 

 

위에서 말한 main에 합쳐지긴 했지만 반영이 되지 않았기에 이를 해결해주기 위해서는 
git merge new-teams 를 해줘야 한다.

merge는 합쳐질 브랜치에서 작성해줘야 하므로, git switch main 해준 후, merge 해준다.

 

SourceTree를 확인해보면, main에 new-teams의 변경사항이 반영된 것을 확인할 수 있다.

 

new-teams 브랜치도 마찬가지로 main에 모든 변경사항이 반영이 되었으므로 new-teams 브랜치를 삭제해주면 된다.

 

 


 

728x90
댓글수0