이번 포스팅에서는 브랜치가 무엇이고 왜 필요한 지에 대해서 얘기해 볼 것이다. 그리고 git에서 브랜치를 따는 방법에 대해서도  얘기해보자.

 

브랜치란 무엇인가?

 

현실적으로 비슷한 종류의 작업을 여러개하는 경우, 두번째부터는 처음부터 작업을 진행하는 것이 아니라, 
첫번째 작업에서 두번째 작업과 차이가 나는 부분에 대해서만 수정을 하여 효율적으로 진행할 수 있다.

깃뿐만이 아닌 모든 버전 관리 시스템에서 이런 것을 관리하고 사용자가 편리하게 이용하도록 브랜치라는 기능을 사용한다.

일반적으로 이전 포스팅까지 이전에 우리가 커밋을 하면서 버전 관리를 했던것을 마스터(master) 브랜치라고 부른다. 
여기에서 다른 작업을 하기 위해서 브랜치를 만드는 것을 '분기(branch) 한다.' 라고 표현을 한다. 
(실제적으로 이런 표현을 들어본 적은 거의 없다. 일반적으로 '브랜치 딴다(?)' 라는 표현을 더 많이 사용하는 것 같다.)

위에서는 별도의 작업을 진행할 때 브랜치를 만든다고 했지만, 그것 이외에도, 한 프로젝트 내에서 별도의 기능을 추가하고 싶을 때 브랜치를 따기도 한다. 추가 기능이 완성이 되면 브랜치 '병합(merge)'를 통해서 다시 마스터 브랜치에 수정한 내용을 적용하기도 한다. 
(브랜치로 분기한 이후에 추가 기능을 구현하는데 실패하면 그대로 남겨두는 경우도 있다.)

사진 출처 : https://nvie.com/posts/a-successful-git-branching-model/

위의 사진을 보면 버전이 계속해서 업데이트 되는 과정을 볼 수 있다.

마스터 브랜치가 우리가 실생활에서 경험하는 프로그램들의 버전이 된다. 
hotfixes는 버전을 출시했을 때 사용자의 피드백이나 간단한 버그 등을 발견하여 긴급하게 코드를 수정하는 것을 의미한다. 
develop은 실제 개발자들이 다음 업데이트를 위해서 개발하는 버전을 의미하고, 
release branch는 어느정도 다음 버전이 완성이 된 상태를 의미한다. 
feature branch는 위에서 잠깐 얘기한 추가적인 기능을 구현하기 위해서 develop 브랜치에서 별도로 브랜치를 따서  작업하는 것이다. 

이렇게 우리가 지금 하는 것은 단순하지만, 실질적으로 출시되는 소프트웨어의 경우에는 이처럼 버전 관리가 
매우 복잡하게 이루어지는 것을 볼 수 있다. 그리고 이를 편하게 구현하기 위한 수단 중 하나로 git이 존재하고 있는 것이다.

 

브랜치 만들기 

 

본격적으로 브랜치를 만드는 실습에 시본격적으로 브랜치를 만드는 실습을 시작하기에 앞서 manual이라는 새 디렉토리로 만들고 git 디렉토리로 만든 다음 work.txt라는 파일을 vim을 통해서 만든다. work.txt 파일의 내부 내용은 content 1이라고 적고 저장한다. 이후 work.txt를 스테이징하고 커밋한다. 

$ mkdir manual
$ cd manual
$ git init
$ vim work.txt
$ git add work.txt
$ git commit -m "work 1"

 


이후 vim을 통해서 work.txt 파일에 content 2를 추가하고 커밋 메세지는 "work 2"를,펴ㅜ 여기에 content 3를 추가하고 커밋 메세지는 "work 3"를 추가하여 커밋한다. 

$ vim work.txt
$ git commit -am "work 2"
$ vim work.txt
$ git commit -am "work 3"


이렇게 3개의 버전을 커밋한 뒤 git log를 통해서 커밋한 내용들을 보면 
가장 최근에 커밋한 work3의 해시값 옆에 (HEAD -> master)라는 표시가 되어있다. 


HEAD는 여러 브랜치 중 현재 작업 중인 브랜치를 가리킨다는 의미이다. 

깃의 브랜치 목록을 확인하는 코드는 

$ git branch 


이다. 이것을 통해서 마스터 브랜치를 포함해서 어떤 브랜치들이 있는지, 그리고 현재 작업중인 브랜치는 브랜치 이름 앞에'*' 표시가 붙는다. 

$ git branch <브랜치 명>을 통해서 브랜치를 새롭게 만들고 이름을 지정해 줄 수 있다. apple, google, ms 브랜치를 만들고  브랜치 목록을 확인한다. 

$ git branch apple
$ git branch google
$ git branch ms

 



현재는 브랜치를 생성하였을 뿐 생성하는 브랜치를 가리키고 있지 않다. 위의 사진에서도 '*'표시가 마스터 브랜치에 
붙어있는 것을 확인할 수 있다. 

일단 work.txt 파일이 현재 어떻게 되어있는지 확인해보자.



여기에 'content 4'라는 내용을 추가하고 커밋해보자.

$ vim work.txt
$ git commit -am "master content 4"
$git log --online 


git log에 --oneline이라는 옵션을 주어, 여러가지 정보보다는 간략하게 각 브랜치의 최신 커밋과 지금까지 커밋을 확인할 수 있다.

위의 사진을 보면 마스터 브랜치만 master content 4를 가리키고 이전에 만들었던 브랜치 3개(apple, google, ms)는 
여전히 work 3를 가리키고 있는 것을 볼 수 있다. 마스터 브랜치에 추가적인 커밋을 한다고 해서, 나머지 브랜치들이
자동으로 커밋이 되지 않는다는 점을 주의하자!

현재 가리키고 있는 브랜치를 바꾸기 위해서는 
$ git checkout <브랜치 명> 코드를 사용해야 한다. 

$ git checkout apple
$ git log --oneline 

을 확인하면 이후에 커밋되었던 마스터 브랜치는 보이지 않고, 나머지 브랜치들만 보인다. 또한 HEAD가 apple을 가리키는 것을 확인할 수 있다.

$ git checkout google
$ git log --oneline 

 



이번에는 HEAD가 google을 가리킨다. ms로 바꾸어도 마찬가지이다. 

$ git checkout ms
$ git log --oneline 

 

다음 포스팅에서 브랜다음 포스팅에서 브랜치의 정보를 확인하는 방법, 병합하는 방법, 관리하는 방법에 대해서 알아보자.

728x90
반응형

'버전 관리 > git & github' 카테고리의 다른 글

깃과 브랜치 3  (0) 2021.01.14
git과 브랜치 2  (0) 2021.01.13
git을 이용하여 수정한 파일 되돌리기  (0) 2021.01.09
git에서 커밋한 파일 확인 및 수정하기  (0) 2021.01.08
깃을 이용한 버전 관리  (0) 2021.01.06
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기