여러 개발자가 동시에 서로 다른 작업을 할 수 있게 만들어 주는 기능이 바로 '브랜치(Branch)'
협업을 하는 상황 뿐만 아니라, 기존의 소스 코드를 해치지 않으면서 다른 작업을 시도해보고 싶을 때에도 이 브랜치 기능을 활용 가능
feature 브랜치에서 완성한 코드를 기존 소스 코드에 반영해도 문제가 없다면, 그 때 병합(merge) 가능
'작업 단위', 즉 브랜치로 그 작업의 내용들이 모두 기록되기 때문에 문제가 발생했을 때 원인이 되는 작업을 찾아내거나 그에 따른 대책을 세우기 쉬워짐
배포될 소스 코드가 기록되는 브랜치
Github Repository를 생성하게 되면 기본적으로 main 브랜치가 생김 (기존 Repository의 경우 master로 되어 있는 곳도 많음)
해당 프로젝트의 모든 기능이 정상적으로 작동하는 상태의 소스코드가 담겨 있다.
기능 추가, 버그 수정과 같이 단위 작업을 위한 브랜치
통합 브랜치로부터 만들어내며, 피처 브랜치에서 하나의 작업이 완료가 되면 다시 통합 브랜치에 병합하는 방식으로 진행된다. 토픽 브랜치라고도 함
$ git branch 새로운 브랜치 이름
$ git switch -c 새로운 브랜치 이름
$ git checkout -b 새로운 브랜치 이름
$ git branch
$ git branch -v
$ git branch -d 삭제할 브랜치 이름
$ git branch -D
해당 명령어는 병합하지 않은 브랜치를 강제 삭제하는 방법$ git switch 브랜치 이름
$ git checkout 브랜치 이름
$ git checkout master
$ git merge dev
$ git log --branches --graph --decorate
$ git stash
브랜치를 병합할때 상위 브랜치가 추가 커밋이 없을 경우 브랜치가 분기될 필요가 없으므로 자동적으로 fast-forward
방식으로 병합이 이뤄짐
fast-forward
방식이란 별도의 커밋을 생성하지 않고 상위 브랜치가 가리키는 커밋을 하위 브랜치가 생성한 커밋으로 바꾸는 작업
상위 브랜치에 별도의 커밋이 있었다면, fast-forward
가 아닌 merge commit
방식으로 병합
이는 각 브랜치가 줄기처럼 분기한 후, 병합의 모양새를 가짐
변경 내용의 이력이 모두 그대로 남아 있기 때문에 이력이 복잡함
말 그대로 branch base를 이동시킨다는 뜻으로, 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능 (fast-forward와도 같음)
Local에서 새로운 브랜치를 생성하고 작업이 끝나면 Remote Repository 로 Push
=> Project Upstream Repository에 반영(merge)될 수 있도록 Pull Request
만약 작업하던 중간에 Remote upstream 에 업데이트가 생긴다면 Local 로 pull