branch

Creating the dots·2021년 10월 28일
0

git

목록 보기
2/3

브랜치

브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념이다. 브랜치는 다른 브랜치에 영향을 받지 않으므로 프로젝트에서 협업할때 코드가 변경될 우려없이 독립적으로 개발할 수 있다.

브랜치의 장점

  • 한 소스코드에서 동시에 여러 작업을 할 수 있다
  • 소스코드의 한 시점과 동일한 상태를 만들고, 브랜치를 넘나들며 작업할 수 있다
  • 각 브랜치에 생긴 변화가 다른 브랜치에 영향을 주지 않고 독립적으로 코딩할 수 있다
  • 브랜치로 작업한 내용들이 모두 기록되므로 문제가 발생했을때 원인을 찾고 대책을 세우기 쉽다

브랜치의 종류

  • 통합 브랜치(integration branch)
    • 배포될 소스코드가 기록되는 브랜치이다. 깃헙 레포를 생성했을때 기본적으로 main 브랜치가 생긴다. 프로젝트의 모든 기능이 정상적으로 작동하는 상태의 소스코드가 담겨있다.
  • 피처 브랜치(feature branch)
    • 기능 추가, 버그 수정과 같이 단위 작업을 위한 브랜치이다. 통합 브랜치로부터 만들어내며, 피처 브랜치에서 하나의 작업이 완료되면 다시 통합 브랜치에 병합하는 방식이다.

분기와 병합

깃으로 버전관리를 시작하면 기본적으로 master 또는 main이라는 브랜치가 만들어진다. 사용자가 커밋할때마다 master 브랜치는 최신 커밋을 가리킨다. 즉, 브랜치는 커밋을 가리키는 포인터와 비슷하다고 생각할 수 있다. 새 브랜치를 만들면 기존에 저장한 파일을 master 브랜치에 그대로 유지하면서 기존 파일 내용을 수정하거나 새로운 기능을 구현할 파일을 만들 수 있다. 이렇게 master 브랜치에서 뻗어나오는 새 브랜치를 만드는 것을 '분기(branch)'한다고 한다.

새 브랜치에서 원하는 작업을 다 끝냈다면, 새 브랜치에 있던 파일을 원래 master 또는 main 브랜치에 합칠 수 있다. 이렇게 분기했던 브랜치를 합치는 것을 '병합(merge)'한다고 한다.

fast-forward 방식의 병합


A 브랜치에 B 브랜치를 머지시키기 전에 A 브랜치에 추가적인 커밋이 없다면 브랜치가 분기될 필요가 없으므로 fast-forward 방식으로 병합된다.

즉, 별도의 커밋을 생성하지 않고 A 브랜치가 가리키는 커밋을 B 브랜치가 생성한 커밋으로 바꾸는 작업이다.

merge commit 방식의 병합

만약 A 브랜치에 B 브랜치를 머지시키기 전에 A 브랜치에 추가적인 커밋이 있었다면, merge commit 방식으로 병합된다.

rebase

branch의 base를 이동시킨다는 뜻으로, 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 한다.

rebase를 활용하면 git history를 깔끔하게 정리할 수 있다.

브랜치 명령어

//새로운 브랜치 생성
git branch `새로운 브랜치 이름`

//새로운 브랜치 생성 후 해당 브랜치로 전환
git switch -c `새로운 브랜치 이름`
git checkout -b `새로운 브랜치 이름`
  
//브랜치 목록 확인
git branch
  
//브랜치 목록과 각 브랜치의 최근 커밋 확인
git branch -v
  
//브랜치 삭제
git branch -d `삭제할 브랜치 이름`
git branch -D  --> 해당 명령어는 병합하지 않은 브랜치를 강제 삭제하는 방법
  
//브랜치 전환
git switch `브랜치 이름`
git checkout `브랜치 이름`
  
//브랜치 병합
master 브랜치로 dev 브랜치를 병합할때 (master <- dev)
1. git checkout master
2. git merge dev

//로그에 모든 브랜치를 그래프로 표현
git log --branches --graph --decorate

//아직 commit하지 않은 작업을 스택에 임시로 저장
git stash
profile
어제보다 나은 오늘을 만드는 중

0개의 댓글