branch

이윤근·2021년 8월 10일
0

Branch

:독립적으로 어떤 작업을 진행하기 위한 개념
개발하다보면 페이지 안의 여러 기능을 따로 규현하기 위해 코드를 여러개로 복사해야 하는 일이 자주 발생하는데
브랜치 기능을 활용하면 코드를 통째로 복사한후 원래 코드가 변경될 우려 없이 독립적으로 개발할 수있다.

이렇게 나누어진 브랜치에서는 각자 독립적인 작업 영역 안에서 마음대로 소스코드를 변경을 할 수 있다.분리된 작업 영역에서 변경된 내용들은 다른 브랜치와 병합하여 다시 새로운 하나의 브랜치로 모을수 있다.

여러명이서 동시에 작업을 할 때에 다른 사람의 작업에 영향을 주거나 받지 않도록 먼저 통합 브랜치에서 자신의 작업 전용 브랜치를 만든다.

그리고 각자의 브랜치에서 맡은 영역에 대한 작업을 진행한 후, 작업이 끝난 브랜치는 통합 브랜치에 병합해서 변경 사항을 적용합니다. 이를 통해 다른 브랜치의 작업에 영향을 받지 않고 독립적으로 특정 작업을 수행하고 그 결과를 하나로 모아 나가게 됩니다. 이렇게 작업을 진행하게 되면 '작업 단위', 즉 브랜치로 그 작업의 내용들이 모두 기록되기 때문에 문제가 발생했을 때 원인이 되는 작업을 찾아내거나 그에 따른 대책을 세우기 쉬워집니다.

1)장점

-한 소스코드에서 다양한 작업을 할 수 있게 해준다
-소스코드의 한 시점과 동일한 상태를 만들고,브랜치를 넘나들며 작업을 할 수 있다.
-각각의 브랜치에서 생긴 변화가 다른 브랜치에 영향을 주지 않고 독립적으로 코딩을 진행할 수 있다.

2)종류

-Integration Branch
:배포될 소스 코드가 기록되는 브랜치
GitHub Repositort를 생성하게 되면 기본적으로 main 브랜치가 생긴다.해당 프로젝트의 모든 기능이 정상적으로 작동하는 상태의 소스코드가 담겨 있다.

-Feature Branch
:기능 추가,버그 수정과 같이 단위 작업을 위한 브랜치
:통합 브랜치로부터 만들어내며,피처 브랜치에서 하나의 작업이 완료가 되면 다시 통합 브랜치에 병합하는 방식으로 진행된다.

-Release branch
:버그를 수정하거나 새로운 기능을 포함한 상태로 모든 기능이 정상적으로 동작하는지 확인하는 브랜치
최종적인 버그 수정 등의 개발을 수행한다. 모든 준비를 마치고 배포가능한 샅애가 되면 master 브랜치로 평합시키고 병합한 커밋에 릴리즈 번호 태그를 추가한다.

-Hotfix branch
:배포한 버전에 긴급하게 수정을 해야하 할 필요가 있을 경우, 'master' 브랜치에서 분기하는 브랜치

3)branch 명령어 모음

(1) 새로운 브랜치 생성
git branch 새로운 브랜치 이름

(2) 새로운 브랜치 생성 후 해당 브랜치로 전환
git switch -c 새로운 브랜치 이름
git checkout -b 새로운 브랜치 이름

(3) 브랜치 목록 확인
git branch

(4)브랜치 목록과 각 브랜치의 최근 커밋 확인
git branch -v

(5)브랜치 삭제
git branch -d 삭제할 브랜치 이름
git branch -D 해당 명령어는 병합하지 않은 브랜치를 강제 삭제하는 방법입니다.

(6)브랜치 전환
git switch 브랜치 이름
git checkout 브랜치 이름

(7)브랜치 병합
master 브랜치로 dev 브랜치를 병합할 때 (master ← dev)
git checkout master
git merge dev

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

(9)아직 commit 하지 않은 작업을 스택에 임시로 저장
git stash

4)흐름

-Remote 생성한 프로잭트 Repository를 각자의 Repository로 가져오기

Fork: 프로젝트 Remote Repository -> 각자의 Remote Repository
clone: 각자의 Remote Repository ->Local Repository

-branch를 생성하고 생성한 branch로 이동하기

기본적으로 개발을 진행하는 과정에서 main branch가아닌 dev(develop) branch를 하나 만들어서 작업을 하는 경우가 많다.
git checkout -b 새로운 브랜치 이름 or git switch -c 새로운 브랜치 이름
Remote Repository에서도 생성한 브랜치를 반영하기 위해서는 git push origin dev 명령어를 입력하면된다.

하나의 기능을 구현할 때 예를들어 feature/기능이름'이라는 브랜치를 만들어 작업하기로 약속했다면 그이름을 가지고 브랜치를 만든다.(그 기능 branch에서 개발할 때에 또 checkout이나 switch를 이용해 만들고 이동하면된다)

-생성한 브랜치 목록 및 현재 위치한 branch 확인하기

git branch 명령어를 통해 확인이 가능함

-병합하기

병합하기 위해서는 병합이 될 브랜치로 이동을 해야한다. swich나 checkout으로 그 브랜치로 이동을 하자.
git merge 병합할 branch 이름

fast-forward: 별도로 커밋을 생성하지 않고 합병될 branch가 가르키는 커밋이 합병될 branch의 이름으로 생성한 커밋으로 바꾸는 작업
rebase와 merge의 차이점
merge:변경 내용의 이력이 모두 그대로 남아 있기 떄문에 이력이 복잡해짐
rebase:말 그래도 branch base를 이동시킨다는 뜻으로,머지처럼 브랜치 통합을 목적으로 하지만,특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능

만약 feature/test라는 branch를 만들어서 열심히 작업을 하고 master에 merge를 사용해서 병합한다고하면, feature/test에서 기록한 모든 commit이 master의 commit으로 기록된다.
rebase 방식을 사용해서 병합한다면, 내 작업하면서 남겼던 commit 중 불필요한 것들은 생략시키고 필요한 commit만 남겨서 master에 병합하기 때문에 master의 commit은 항상 깔끔하게 관리된다는 장점이 있다. (https://firework-ham.tistory.com/12 참고)

-Remote Repository로 업로드하기

git push origin 브랜치 이름

-내가 push한 변경 사항에 대해서 다른 사람들에게 알리는 것

Pull Request

*만약에 작업 중간에 업데이트가 된다면 pull로 받아주어야한다.

5)명령어

(1)rebase
:커밋의 베이스를 다시 정하고 싶은 경우

(2)squash
:여러 개의 커밋 로그를 하나로 묶고 싶은경우

(3)revert
:커밋 여러 개의 변경 사항을 취소하고 싶은 경우

(4)--amend
:최근 커밋 메세지를 수정하고 싶은 경우

(https://dangitgit.com/ko 참고)

profile
성실한코딩러

0개의 댓글