[코드스쿼드 마스터즈] 깃의 브랜치란?

Kyu·2020년 12월 7일
0
post-thumbnail

Note: 개인 공부용으로 모든 자료는 거의 복붙형태이고 내용을 재구성하기만 했습니다. 공부하시려면 제가 공부한 사이트에 들어가서 하시는 것을 추천합니다

https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

브랜치

브랜치란?

  • 코드를 통째로 복사하고나서 원래 코드와 상관없이 독립적으로 개발이 가능한데, 이렇게 독립적으로 개발하는것이 브랜치이다
  • 브랜치가 한국어로 나뭇가지라는 의미를 돌이켜보면, 좀 더 와닿을듯?

Git의 데이터 저장방식

  • 커밋하면 Git은 현 Staging Area에 있는 데이터의 스냅샷에 대한 여러가지 정보들을 포함하는 커밋 객체(Commit Object)를 만든다.

변경된 파일 전체를 저장하지 않고, 파일에서 변경된 부분을 찾아 수정된 내용만 저장합니다. 마치 변화된 부분만 찾아 사진을 찍는 것과 같다고 하여 스냅샷 방식이라고 합니다.

  • Git의 브랜치는 커밋 사이를 가볍게 이동할 수 있는 어떤 포인터 같은 것이다. 기본적으로 Git은 master 브랜치를 만든다. 처음 커밋하면 이 master 브랜치가 생성된 커밋을 가리킨다. 이후 커밋을 만들면 master브랜치는 자동으로 가장 마지막 커밋을 가리킨다.

note: Git 버전 관리 시스템에서 "master" 브랜치는 특별하지 않다. 다른 브랜치와 다른 것이 없다. 다만 모든 저장소에서 "master" 브랜치가 존재하는 이유는 git init 명령으로 초기화할 때 자동으로 만들어진 이 브랜치를 애써 다른 이름으로 변경하지 않기 때문이다.

새 브랜치 만들기

  • testing 브랜치를 만드는 명령어는 아래와 같다
$ git branch testing
  • 새로 만든 브랜치도 지금 작업하고 있던 마지막 커밋을 가리킨다 .

한 커밋 히스토리를 가리키는 두 브랜치

  • 지금 작업중인 브랜치가 무엇인지 Git은 어떻게 파악할까?
  • 다른 VCS와 달리 Git은 'HEAD'라는 특수한 포인터가 있다.
  • 이 포인터는 지금 작업하는 로컬 브랜치를 가리키는데.
  • 위와 같이 브랜치를 새로 만들어도 Git은 아직 master브랜치를 가리키고 있다.
  • git branch 명령은 브랜치를 만들기만 하고 브랜치를 옮기진 않는다.

브랜치 이동하기

  • git checkout 명령으로 다른 브랜치로 이동할 수 있다.
$ git checkout testing
  • 이렇게 하면 HEAD는 testing 브랜치를 가리킨다.

  • 여기서 커밋을 새로하게되면.....

  • 짜잔!
  • HEAD는 testing을 가리키지만 여전히 master는 이전 커밋을 가리키고 있다.
  • 다시 master 브랜치로 돌아가보자
$ git checkout master

  • 즉 HEAD가 Checkout 한 브랜치로 이동한다.
  • 이 말은, master 브랜치가 가리키는 커밋을 HEAD가 가리키게 하고 워킹 디렉토리의 파일도 그 시점으로 되돌려 놓았다.
  • 앞으로 커밋을 하면 다른 브랜치의 작업들과 별개로 진행되기 때문에 testing 브랜치에서 임시로 작업하고 원래 master 브랜치로 돌아와서 하던일을 계속 할 수 있다.

note: 브랜치를 이동하면 워킹 디렉토리의 파일이 변경된다는 점을 기억해야 한다. 이전에 작업했던 브랜치로 이동하면 워킹 디렉토리의 파일은 그 브랜치에서 가장 마지막으로 했던 작업 내용으로 변경된다. 파일 변경시 문제가 있어 브랜치를 이동시키는게 불가한 경우엔 Git은 브랜치 이동 명령을 수행하지 않는다

  • 현재 HEAD가 master를 가리키고 있는 상태에서, 파일을 수정하고 다시 커밋하면 다음과 같다

브랜치 명명 규칙 참고:
https://qastack.kr/programming/273695/what-are-some-examples-of-commonly-used-practices-for-naming-git-branches

profile
TIL 남기는 공간입니다

0개의 댓글