Git

[Git 교과서] 6장-1 Branch

차노도리 2023. 5. 27. 17:29

Branch

  • 나뭇가지, 지사, 분점 등 줄기 하나에서 뻗어나온 갈림길을 의미한다.
  • 저장공간 하나에서 가상의 다른 저장 공간을 만드는 것이다.

Branch 특징

  • 가상 폴더
    • 작업 폴더를 실제로 복사하지 않고, 가상 폴더로 생성한다.
    • 외부적으로는 물리적인 파일 하나만 있는 것으로 보인다.
  • 독립적인 동작
    • 원본 폴더와 분리하여 독립적으로 개발 작업을 수행할 수 있다.
    • 분리된 코드를 좀 더 쉽게 병합할 수 있다.
  • 빠른 동작

 

Branch 생성

  • 공통된 커밋을 가리키는 지점
  • 커밋처럼 SHA1 해시키를 가리킨다.
  • SHA1 해시키는 기억하기 어려워 특정 커밋을 가리키는 `별칭`을 만든다.
  • 기존 브랜치 또는 커밋에 새로운 연결고리를 하나 더 만드는 것
  • 브랜치를 생성한다는 것은 `분기점`을 의미한다.(생성에 제한은 없음)
  • 현재 `HEAD` 기준으로 새로운 브랜치가 생성된다.
  • 커밋 ID를 지정할 시, 지정한 `커밋ID`를 기준으로 브랜치를 생성한다.
  • 실제 브랜치 생성 시점은 커밋이 추가될때 생성된다.
$ git branch 브랜치이름 커밋ID

 

Branch 이름

  • 알기 쉬운 이름으로 짓기
    • 깃 플로우에서 정의한 브랜치 이름을 적용
    • master : 제품으로 출시될 수 있는 브랜치
    • feature : 기능을 개발하는 브랜치
    • hotfix : 출시 버전에서 발생한 버그를 수정 하는 브랜치
    • release : 이번 출시 버전을 준비하는 브랜치
    • develop : 다음 출시 버전을 개발하는 브랜치
  • 슬래시(/)를 사용해 계층구조로 만들어 사용할 수 있음
  • 브랜치 이름은 중복해서 사용하지 않아야함
  • branch 이름 제한
    • 기호(-)로 시작할 수 없음
    • 연속적인 마침표(..) 포함할 수 없음
    • 아스키 제어 문자는 포함할 없음
    • 빈칸, 공백문자, 물결(~), 캐럿(^), 물음표(?), 별표(*), 대괄호([]) 등은 포함할 수 없음
    • 마침표(.)로 시작할 수 없음

 

Branch 확인

  • 간단한 브랜치 목록을 보기 명령어
  • 별 * 표시가 된 브랜치는 현재 선택된 브랜치를 의미(내가 보고 있는 브랜치)
$ git branch

 

Branch hash

  • 특정한 커밋의 해시(SHA1)사용한다.
  • 아래 명령어는 현재 브랜치가 어떤 커밋 해시 값(SHA1)을 가리키는지 확인할 수 있다.
$ git -h

 

Branch 세부 사항 확인하기

  • 옵션을 사용하면 상세한 브랜치 정보를 확인할 수 있다.
  • branch 명령어 뒤에 `-v`, `-verbose` 옵션을 함께 사용하면 브랜치 이름, 커밋ID, 커밋 메시지를 확인할 수 있다.
$ git branch -v
$ git branch --verbose

 

Branch 이동

  • - 명령어로 생성하거나 비트버킷으로 브랜치를 생성하게 되면, 브랜치가 자동으로 이동 되지 않는다.
  • - 따라서 `git fetch` 명령어를 입력해 현재 저장소 상태를 업데이트 해주고 `checkout` 해아한다.
$ git fetch
$ git checkout 브랜치명
  • - 현재 브랜치를 떠나 새로운 브랜치로 들어간다는 의미한다.
  • - 깃은 하나의 워킹 디렉터리만 가지고 있다.
  • - 한 브랜치에서만 작업과 커밋을 할 수 있다.

 

Branch 동작 원리

  • HEAD 정보는 항상 변경된 브랜치의 마지막 커밋을 가리킨다.
  • HEAD 는 브랜치의 마지막 커밋을 의미하기 때문에 브랜치가 이동하려면 HEAD 포인터도 함게 이동한다.
  • 다른 브랜치로 이동하려면 기존 브랜치의 워킹디렉터리를 정리해야 이동할 수 있다.

 

Branch 로그

  • --graph, --graph --all 과 같은 옵션을 사용할 수 있다.
  • --more 옵션으로 출력될 커밋 개수를 제한할 수도 있음
$ git log
$ git log --graph // 인텔리제이나 vscode나 소스트리에서 제공해주는 흐름도 확인이 가능
$ git log --graph --all // 브랜치의 모든 로그를 확인할 수 있음
$ git log show-branch --more=10

 

 HEAD 포인터

  • 마지막 커밋 : `HEAD`
  • 브랜치를 이동하면 HEAD 포인트도 이동된다.
  • 브랜치가 여러개면 HEAD 포인트도 여러개 이다.

AHEAD, BHEAD

  • AHEAD, BHEAD 앞에 A, B가 붙은 포인터도 있다.
  • 서로 다른 커밋을 가리키는 HEAD 포인터를 가진다는 의미한다.
  • AHEAD : 서버로 전송되지 않은 로컬 커밋이 있는것 -> 로컬 브랜치가 앞서 있는것
  • BHEAD : 로컬 저장소로 아직 내려받지 않은 커밋이 있는것 -> 로컬 브랜치가 뒤쳐져 있는것

 

생성과 이동

  • 생성과 이동은 별개의 동작 branch, checkout 명령어가 구분되어 있다.
  • 자동 이동 옵션 : -b` 옵션을 사용하면 브랜치 생성과 이동을 한 번에 할 수 있다.
  • 커밋 이동 : 커밋 해시값을 입력하면 체크아웃 할 수 있다.
  • HEAD 를 활용한 이동 : 좀 더 간편한 방법으로 HEAD 포인터를 사용해 체크아웃도 가능하다.
$ git checkout -b 브랜치명
$ git checkout d87466c
$ git checkout HEAD-1 // 현재를 기준으로 한단계 전
$ git checkout HEAD-숫자 // 숫자영역을 입력하면 여러단계 이전으로 이동 가능

 

'Git' 카테고리의 다른 글

[Git 교과서] 7장 Stash  (0) 2023.06.15
[Git 교과서] 6장-2 Branch  (0) 2023.06.03
[Git 교과서] 5장 서버  (0) 2023.05.24
[Git 교과서] 4장 커밋  (1) 2023.05.11
[Git 교과서] 3장 깃 개념 잡기  (0) 2023.05.02