-
[Git] branch(브랜치)우아한 테크코스/테크코스 2020. 3. 9. 15:35반응형
branch(브랜치)
각각의 작업을 병행할 때 사용, 나뭇가지같은 모양이라하여 브랜치라 불림
master 브랜치
Git에서 기본적으로 생성되는 브랜치
안정적인 코드만 들어가므로 기능을 구현할 때는 브랜치를 생성하여 작업
Git Branch 종류 5가지
종류
메인 브랜치 2개(master, develop), 서브 브랜치 3개(feature, release, hotfix)
Master Branch
출시될 수 있는 브랜치, 배포 가능한 상태만을 관리함
Develop Branch
다음 출시 버전을 개발하는 브랜치
기능 개발을 위한 브랜치들을 병합하기 위해 사용함 - 보통 이 브랜치를 기반으로 개발 진행
모든 기능이 추가되고 버그가 수정되어 배포 가능한 안정적인 상태라면 develop 브랜치를 master 브랜치에 병합(merge)함
Feature Branch
새로운 기능 개발 및 버그 수정이 필요할 때마다 develop 브랜치로부터 분기
기본적으로 작업 공유의 필요가 없기 때문에, 각자의 로컬 저장소에서 관리함
개발 완료 후 develop 브랜치로 병합(merge)하여 다른 사람들과 공유
-
develop 브랜치에서 새로운 기능에 대한 feature 브랜치 분기
-
새 기능에 대한 작업 수행
-
작업 완료 후 develop 브랜치로 병합(merge)
-
필요하지 않은 feature 브랜치는 삭제
-
새로운 기능에 대한 병합한 develop 브랜치를 remote 저장소로 올림(push)
feature 브랜치 명은 feature/기능요약 형식으로 작성(예, feature/login)
Tip. merge --no-ff (--no-ff 옵션)
새로운 커밋 객체를 만들어서 머지 대상의 브랜치에 merge
머지하려는 브랜치의 커밋 이력을 모두 합쳐서 새로운 커밋 객체를 생성하여 머지 대상의 브랜치로 병합(merge)하는 것
사용하지 않을 경우, 모든 커밋이 한 건씩 머지 대상의 브랜치에 머지됨 유의
feature 브랜치에서는 해당 옵션을 사용할 것해당 브랜치를 토픽 브랜치(topic branch)라고도 함 : 하나의 토픽(주제)에만 집중하는 브랜치로, 다른 작업은 하지 않음
Release Branch
이번 배포 버전을 준비하는 브랜치
배포를 위한 전용 브랜치로 한 팀이 해당 배포를 준비하는 동안 다른 팀은 다음 배포를 위한 기능 개발을 계속 할 수 있음
개발 단계를 정의하기에 좋고, 팀 구성원들과 쉽게 소통 및 합의할 수 있게 됨
-
develop 브랜치에서 배포할 수 있는 수준의 기능이 모이거나 배포 일정이 되면 release 브랜치를 분기
-
release 브랜치를 만드는 순간부터 배포 사이클이 시작됨
-
release 브랜치는 배포를 위한 최종 버그 수정, 문서 추가 등의 릴리즈와 관련된 작업 수행
-
직접적인 릴리즈와 관련된 작업을 제외하고는 release 브랜치에 새로운 기능을 추가로 병합(merge)하지 말 것
-
release 브랜치에서 배포 가능한 상태가 되면 master 브랜치에 병합(이 때, 병합한 커밋에 Release 버전 태그 부여)
-
배포를 준비하는 동안 release 브랜치가 변경되었을 수 있으므로 배포 후 develop 브랜치에도 병합
-
다음 번 배포를 위한 개발 작업은 develop 브랜치에서 계속 진행
브랜치명은 release-* 또는 release/*처럼 짓는 것이 관례이나 release-*방식을 많이 씀
Hotfix Branch
출시 버전에서 발생한 버그를 수정하는 브랜치
배포 전 긴급 수정할 때, master 브랜치에서 분기하는 브랜치(시간 절약 및 안정성 보장)
-
배포한 버전에 긴급 수정할 경우 master 브랜치에서 hotfix 브랜치 분기
-
문제가 되는 부분만 빠르게 수정 후 master 브랜치에 merge하여 안정적으로 재배포(새로운 버전명으로 태깅)
-
hotfix 브랜치에서의 변경 사항은 develop 브랜치에도 병합(merge)
hotfix 브랜치명은 hotfix-* 형식을 추천
git branch : 브랜치 확인
브랜치 명령 표시, 어떤 브랜치를 사용하는지 확인(* : 현재 브랜치)
$ git branch * master
git checkout -b : 브랜치를 만들고 변경
checkout -b는 branch + checkout 과 같음
브랜치를 만든 후(branch), 해당 브랜치로 이동(checkout)하는 것
$ git checkout -b jamie $ git branch jamie $ git checkout jamie
feture-jamie 브랜치 작성
$ git checkout -b feature/jamie M README.md Switched to a new branch 'feature/jamie' $ git branch * feature/jamie master
이전 사용 브랜치로 이동
$ git checkout - M README.md Switched to branch 'master'
브랜치명 변경
git branch -m "기존브랜치명" "신규브랜치명" // remote 저장소에서도 기존브랜치명을 제거해준다. git push origin :기존브랜치명 // remote 저장소에 신규브랜치명을 푸시한다 git push origin 신규브랜치명
기존 브랜치 제거
// local의 브랜치를 제거한다. git branch -d "삭제할브랜치명" // remote의 브랜치를 제거한다. git push origin :삭제할브랜치명
git merge : 브랜치 병합
브랜치에서 작업 하기
$ echo "\n와아아" > README.md $ git add README.md $ git commit [feature/jamie 28f398e] 한 줄 추가함 1 file changed, 1 insertion(+), 1 deletion(-)
구현 완료한 브랜치를 통합 브랜치로 병합시키기
// master 브랜치로 변경 $ git checkout master // merge --no-off(커밋메시지모두가져오기) $ git merge --no-off feature/jamie Merge branch 'feature/jamie' # Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty message aborts # the commit. Merge made by the 'recursive' strategy. README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
git log --graph : 브랜치를 그래프로 확인
$ git log --graph * commit a7625104cf557ad77d71a7184350f6c106bc8c62 (HEAD -> master) |\ Merge: 3cb0815 28f398e | | Author: jamie <jamie@example.com> | | Date: Mon Mar 9 15:32:42 2020 +0900 | | | | Merge branch 'feature/jamie' | | | * commit 28f398e700ce7c91c16811af2c3230b4a3e4eac9 (feature/jamie) |/ Author: jamie <jamie@example.com> | Date: Mon Mar 9 15:30:35 2020 +0900 | | 한 줄 추가함 | * commit 3cb0815dff87c72281e8b07bb41f45d0aa001fa9 | Author: jamie <jamie@example.com> | Date: Mon Mar 9 14:45:05 2020 +0900 | | 첫 번째 요약줄 - Readme2 추가 | | 세 번째 줄 - 상세 | 상세2 | * commit 610b9297f4f2907ec532b92336c3b65165a80d33 Author: jamie <jamie@example.com> Date: Mon Mar 9 14:31:49 2020 +0900 [Add] Readme
반응형'우아한 테크코스 > 테크코스' 카테고리의 다른 글
[Git] commit 조작하기 (0) 2020.03.09 [Git] stash(임시저장) (0) 2020.03.09 [Git] 기본 사용법(in Local Repo) (0) 2020.03.09 [Git] 초기 설정하기 (0) 2020.03.09 [Java] 객체지향 생활 체조 원칙 9가지 (from 소트웍스 앤솔러지) (3) 2020.03.05 -