Git

Git - 브랜치(Branches)

Namiz_IT 2024. 7. 23. 18:47

 

Git 브랜치란 무엇일까요?

 Git 브랜치는 소스 코드의 특정 시점을 가리키는 포인터라고 생각하면 쉽다. 마치 책의 펼쳐진 페이지처럼, 현재 작업하고 있는 코드의 상태를 나타낸다. 하나의 프로젝트에서 여러 개의 브랜치를 만들어 각각 다른 기능을 개발하거나 버그를 수정할 수 있다.

간단히 말해, Git 브랜치는 코드의 개발 흐름을 분리하여 관리하는 기능이다.


브랜치를 사용하는 이유

 Git에서 브랜치를 사용하는 특징적인 이유 두 가지를 살펴보기 전에, 왜 브랜치가 유용한지 알아보자.

브랜치를 사용하는 이유는 다음과 같다.

  • 동일한 프로젝트에서 다른 방식으로 작업하기
  • 여러 사람이 동시에 같은 프로젝트에서 작업하도록 지원하기

 브랜치는 개발 라인이라고 생각할 수 있다. Git 프로젝트는 여러 개의 브랜치(또는 개발 라인)를 가질 수 있다. 이러한 각 브랜치는 프로젝트의 독립적인 버전이다. Git 프로젝트는 프로젝트를 작업하는 사람들의 필요에 따라 서로 다른 방식으로 브랜치를 사용할 수 있다.

 브랜치 작업의 일반적인 패턴은 하나의 공식적인 기본 개발 라인(main 또는 primary 브랜치)을 가지고, 거기에서 프로젝트의 특정 부분만을 작업하는 데 사용되는 주제 브랜치 또는 기능 브랜치라고 불리는 보조 브랜치를 만드는 것이다. 이러한 주제 브랜치는 수명이 짧다. 궁극적으로 기본 브랜치에 다시 결합 또는 통합되고 삭제된다.

 한 브랜치를 다른 브랜치에 통합하는 데 사용할 수 있는 두 가지 프로세스에는 머지(merging)와 리베이스(rebasing)가 있다.


Git 히스토리: master와 main

 일반적으로 옵션 없이 git init 명령어만 사용하여 로컬 저장소를 초기화하면 Git은 내부적으로 master라는 이름의 브랜치를 생성한다. 하지만 최근 "master"라는 용어는 포괄적이지 않다고 여겨지면서, Git 커뮤니티 상당 부분은 기본 브랜치 이름으로 main (또는 다른 이름)을 사용하도록 전환하기로 결정했다.


브랜치 만들기

명령어 요약

  • git branch : 로컬 브랜치 목록 확인
  • git branch <브랜치 이름> : 새로운 브랜치 만들기 (예시: git branch feature/x )

 Git 프로젝트 생성시에는 main(또는 master)이라는 로컬 브랜치가 하나만 있다. 로컬 저장소에 있는 브랜치 목록을 보려면 git branch 명령어를 사용할 수 있다. 새로운 브랜치를 만들려면 아직 존재하지 않는 브랜치 이름을 이 명령어에 전달하면 된다. 주의할 점은 브랜치 이름에는 공백을 포함할 수 없다.


HEAD란 무엇인가?

 Git에서 HEAD는 현재 작업 중인 브랜치의 가장 최신 커밋을 가리키는 포인터이다. 쉽게 말해, 지금 어떤 버전의 프로젝트를 보고 있는지 알려주는 역할을 한다. HEAD는 항상 대문자로 표기되며, 이는 약어가 아니라 단순히 규칙이다.

 

HEAD의 역할

  • 현재 브랜치 확인 : HEAD는 현재 어떤 브랜치에 있는지 확인하는 데 사용된다. git branch 명령을 사용하면 현재 브랜치 옆에 별표(*)가 표시된다. git log 명령을 사용하면 HEAD가 현재 브랜치를 괄호 안에 표시한다.
  • 커밋 이동 : HEAD는 git checkout 명령을 사용하여 커밋 사이를 이동하는 데 사용된다. 특정 커밋으로 이동하면 HEAD가 해당 커밋을 가리키게 된다.
  • 브랜치 만들기 및 삭제 : HEAD는 git branch 명령을 사용하여 새 브랜치를 만들거나 기존 브랜치를 삭제하는 데 사용됩니다. 새 브랜치를 만들면 HEAD가 해당 브랜치의 첫 번째 커밋을 가리키게 된다.
  • 브랜치 전환 : HEAD는 git checkout 명령을 사용하여 브랜치를 전환하는 데 사용된다. 다른 브랜치로 전환하면 HEAD가 해당 브랜치의 가장 최신 커밋을 가리키게 된다.

HEAD와 브랜치의 관계

HEAD는 항상 특정 브랜치를 가리킨다. 브랜치는 커밋의 연결된 목록이며, 가장 최신 커밋을 HEAD가 가리킨다. 새 커밋을 작성하면 HEAD가 해당 커밋을 가리키게 되고, 브랜치의 길이가 1 증가한다.

 

HEAD와 커밋의 관계

HEAD는 특정 커밋을 가리킬 수도 있지만, 일반적으로는 브랜치를 통해 간접적으로 커밋을 가리킨다. HEAD가 가리키는 브랜치의 가장 최신 커밋을 가리키게 된다.

 

참고 :

  • HEAD는 .git 디렉토리의 HEAD 파일에 저장된다.
  • HEAD가 가리키는 커밋은 git log 명령을 사용하여 확인할 수 있다.
  • HEAD를 사용하여 다양한 Git 작업을 수행할 수 있다.

브랜치 전환하기

 Git 프로젝트에서 다른 브랜치 (또는 개발 라인)에서 작업하려면 해당 브랜치로 전환해야 한다. Git 용어로는 다른 브랜치를 "체크 아웃(checkout)" 한다고 말한다.

 현재 프로젝트에는 main과 feature라는 두 개의 브랜치가 있습니다. 하지만 앞서 본 것처럼 Git에서 브랜치를 만들었다고 해서 자동으로 해당 브랜치로 전환되는 것은 아니다. 반드시 어떤 브랜치로 전환하고 싶다고 명시적으로 Git에게 지시해야 한다. git switch 명령어 또는 git checkout 명령어를 사용하여 원하는 브랜치 이름을 입력해야 수행할 수 있다.

 

주의 :

  • Git 버전이 2.23보다 이전이라면 git switch 명령어를 사용할 수 없고 git checkout 명령어를 사용해야 한다. git checkout 명령어는 모든 Git 사용자가 사용할 수 있다.

명령어 :

git switch 브랜치 전환
git checkout 브랜치 전환

 git switch 명령어는 단지 브랜치를 전환하는 역할만 하지만, git checkout 명령어는 더 많은 기능을 수행한다. git switch (또는 git checkout) 명령어는 브랜치를 전환할 때 세 가지 작업을 수행한다.

  1. HEAD 포인터 변경: 전환하려는 브랜치를 가리키도록 HEAD 포인터를 변경한다.
  2. 스테이징 영역 채우기: 전환하려는 커밋의 스냅샷으로 스테이징 영역을 채운다.
  3. 작업 디렉토리 복사: 스테이징 영역의 내용을 작업 디렉토리에 복사한다.

주의 :

 요약하면, 브랜치를 변경하면 보고 있는 커밋이 바뀌게 된다. 

 
반응형