Git Branch

주형(Jureamer)·2022년 1월 4일
0

Git Branch?

브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념으로,
뜻과 같이 작업들을 가지치는 행위라고 볼 수 있다.

개발을 하다보면 한 페이지 안의 여러 기능을 구현하기 위해, 코드를 여러 개로 복사하는 일이 잦은데, 브랜치를 활용하면 코드를 통째로 복사한 후 원래 코드가 변경 될 우려 없이 독립적으로 개발 가능하다.

장점

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

Branch의 종류

통합 브랜치 (Integration Branch)
배포될 소스 코드가 기록되는 브랜치로, Github Repository를 생성하게 되면 기본적으로 main 브랜치가 생긴다. (기존 Repository의 경우 master일 경우도 있음)
해당 프로젝트의 모든 기능이 정상적으로 작동하는 상태의 소스코드가 담겨 있다.

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

Branch 명령어

<새로운 브랜치 생성>
$ 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

Git merge

git에서 브랜치를 병합하는 방법에는 merge와 rebase가 있다.

merge를 사용하여 병합할 경우 2가지 방식으로 병합이 나뉜다.

Merge

1. fast-forward(빨리감기) 방식
'bugfix'브랜치를 'master'브랜치로 병합할 때, master에 추가적인 커밋이 없다면 브랜치가 분기될 필요가 없다. 그렇다면 master에서 bugfix의 커밋 이력을 포함하여 앞으로 이동하는 방식이다.

2. merge-commit(병합 커밋) 방식
master가 커밋 이력을 갖고있다면 하나의 내용으로 통합할 필요가 있다. 그럴 경우 양쪽의 변경을 가져와 merge commit을 실행하여 아래와 같이 분기점을 합친다.

rebase

rebase는 base를 재설정한다는 의미이다.
merge는 변경 내용의 이력이 모두 그대로 남아 있기 때문에 이력이 복잡해진다

하지만 rebase는 특성 시점으로 브랜치가 가리키는 곳을 변경한다. 해당 그림에서
feature/login 브랜치에서 git rebase main feature/login 명령어를 입력하면 main의 가장 최신 커밋으로 브랜치가 가리키는 곳으로 변경된다. (main의 다른 커밋에서 충돌이 없을 경우)

Tip

작업 과정을 그대로 두고, 브랜치를 마음대로 옮겨다니고 싶을 때,

  1. (임시저장) git stash
  2. (브랜치 이동) git switch 브랜치명

Reference

profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글