[github] GitHub 여러개의 브랜치로 분기시키는 법

2023. 8. 28. 00:09프로그래밍

* 병합전

 

*병합후

 

* main branch

 

 

* feature1 branch

 

학원에서 진행하는 파이널 프로젝트 진행중 팀원들과 함께 merge를 해야할 일이 생겼다. 처음 repository를 생성하고 각자의 branch에서 작업하다가 이제 병합해야하는 과정을 거쳐야만 했는데 저장소를 생성하고 branch를 만든 것부터 내가 잘못했던 것 같아 다시 개념을 정리하고자 한다. 

 

git clone은 git init + git remote add origin + git pull origin 을 합쳐놓은 것과 같다. 

즉 해당 저장소(repository)의 브랜치(git branch -b로 설정안할시 default branch  main/mastr)가 가지고 있는 파일을 모두 내 로컬 저장소에 가지고 오는 것이다. 

git branch는 내 로컬 저장소에서 사용할 branch명을 추가하는 것이다. 

git branch 변경할 브랜치명 은 현재 내가 가리키고 있는 branch명을 변경할 브랜치명으로 변경하는 것이고 

git branch -M 남길 브랜치명 은 남길 브랜치명을 제외한 모든 로컬의 branch명을 제거한다.

git branch -m 새로 생성할 브랜치명 은 새로 생성할 브랜치명으로 브랜치를 생성하면서 그 브랜치명을 가지게 된다. 이미 있는 브랜치라면 그 브랜치명으로 이름을 바꿔주는 역할만 실행한다. 

 

일반적으로 fast-forward방식이든 아니든 브랜치 분기는 특정 commit log에서부터 비롯된다. 

즉 위와 같이 main third commit까지 진행한 상태에서 새롭게 브랜치를 생성하고 싶다면 다음과 같은 과정을 진행한다.

- git checkout main ->  현재 로컬에서 가르키는 HEAD를 (정확히 말하면 현재 로컬에서 가르키는 branch를 뜻한다) main으로 바꾼다.

- 수정사항을 만들고 add commit을 한다. (main과 서로 다른 변경내용을 가지고 있음)

- git branch -m feature1과 같이 원격(remote)에 생성할 브랜치를 로컬에 생성한다.

- git push -u origin feature1 명령어로 리모트에 feature1 브랜치를 생성함과 동시에 변경사항을 push하면

main의 third commit 내역에서 분기된 feature1 브랜치가 생성된다. 

- feature2,3,4 역시 마찬가지로 checkout으로 main으로 HEAD를 돌려놓고 수정사항을 만들어 새로운 branch로 푸시하면 새로운 브랜치로 분기되는 것이다. 

 

혹은 다음과 같은 과정으로도 위와 같은 결과를 낼 수 있다. 

우측의 New branch를 클릭 후

해당 브랜치를 분기시킬 브랜치를 선택한다. 즉 main feature1, feature2... 브랜치 중 하나를 선택하고 새로 브랜치를 생성한다는 것은

선택한 브랜치의 가장 최근 commit내역을 기반으로 한 브랜치를 생성한다는 것이고 생성된 브랜치는 그 브랜치에서부터 분기됨을 뜻한다.

 

생성이 완료됐다면 터미널에서 git fetch를 실시한다. git fetch는 remote의 변경사항( 새 브랜치 생성, 브랜치의 commit 업데이트 ) 등을 가지고 온다. fetch후 git checkout '새로 생성한 branch명' 으로 HEAD를 돌려준다. 이후 수정사항을 만들고 add commit push를 거치게 되면 마찬가지로 특정 브랜치의 커밋에서 분기된 새로운 브랜치가 생성되는 것이다. 

 

HEAD는 현재 내가 참조하고 있는 브랜치의 특정 commit을 가르킨다. 일단적으로 git checkout시에는 해당 브랜치의 가장 최근 커밋에 HEAD가 가있으며 reflog 혹은 log 명령어를 통해 해당 브랜치의 예전 커밋으로도 HEAD를 돌릴 수 있다. 당연하게도 거기서부터 분기를 시작할 수 있다.