Branching

 git을 잘 사용하기 위해서는 branching을 잘 관리해야 한다. branching을 잘 사용하면 선형적인 개발이 아닌 비선형적인 개발을 할 수 있으며 버전 관리를 하는 것이 더 용이해진다. 따라서 복잡한 branch를 잘 관리할 수 있도록 해야 한다.

 branching 개념을 소개하기 전에 HEAD와 master가 무엇인지 알아야 한다. master는 기본적으로 생성되어 있는 branch다. 그리고 HEAD는 pointer로 가장 마지막으로 commit 한 곳이 어딘지를 가리키는 pointer다.(추후 이 HEAD를 임의로 옮길 수 있긴 하다.)

git의 master와 HEAD

branch의 생성, 이동, merge

 

git의 흐름도와 실제 폴더

 위와 같이 default인 branch가 있다고 하자. c0과 c1은 commit이며 숫자가 작을수록 더 오래된 commit이다. 따라서 c1이 더 최신 commit이므로  defult와 HEAD가 c1을 가리키고 있다.

 branch를 만드는 명령어는 branch이다. git branch <만들 branch명> 명령어를 입력해서 branch를 만들 수 있다. 따라서 git branch experiment를 입력해서 새 branch를 만들도록 하자.

 

branch를 만들어도 master

 

 branch를 만들어도 HEAD를 옮긴 것이 아니므로 experiment로 branch가 이동한 상태는 아니다. 아직 HEAD가 master(default)에 있는 것이므로 지금 commit을 한다면 master에 c2가 쌓이게 될 것이다. 따라서 새로 만든 experiment branch로 이동하기 위해서 checkout이라는 명령어를 사용한다. git checkout <이동할 branch명> 명령어를 입력해서 branch를 이동할 수 있다. 따라서 git checkout experiment를 입력해서 이동하도록 하자.

 

experiment로의 이동

 

 branch를 이동했다면 다음과 같이 푸른색 master가 experiment로 바뀐 것을 알 수 있다. 따라서 이 상태에서 commit을 두 번 한다면 experiment 가지에서 증가하게 될 것이다.

 

 

experiment에서의 commit

 

 이제 다시 master(default)로 돌아간다면 어떻게 바뀌게 될까? default에서 commit3.txt와 commit4.txt를 만든 기록이 없으므로 test.txt와 commit2.txt만 가지고 있을 것이다. 

 

이전 사진 재탕한 것이 아닙니다.

 

 merge란 두 개의 branch를 합치는 것을 의미한다. 실생활 예시로 설명한다면 한 프로그램이 A라는 사람이 로그인 기능을 구현하고 B라는 사람이 회원가입을 하는 기능을 구현했다 하자, 각자 branch를 생성해서 기능을 구현했고, 완성했다면 이를 합쳐야 할 것이다. 이때 사용하는 것이 merge라는 기능이다. merge를 설명하기 위해서 commit을 몇 번 더했다. 

 

 

좌상단_현재 상태, 우상단_experiment branch, 아래_default branch

 

 다음과 같은 상태라고 할 때 experiment branch를 이제 default를 합치기 위해서 default(master) branch로 이동을 해야 한다. 그 다음에는 git merge experiment를 하면 experiment가 default에 합쳐지게 된다. 

 

master에 모든 파일이 합쳐졌다.

 

 하지만 merge를 수행했다고 experiment가 사라진 것은 아니다 experiment에 존재하는 변경사항들이 master에 합쳐진 것이지 branch 자체가 사라진 것은 아니다. 따라서 experiment로 변경 후 다시 commit을 하면 다음과 같이 만들어지게 될 것이다.

 

 

 

 

 이렇게 branch를 생성,이동하고 이를 merge를 함으로써 비선형적(병렬적)으로 프로젝트를 진행할 수 있게 된다. 따라서 branch를 잘 사용해서 프로젝트 진행에 효율성을 높이도록 해보자.

'Language > Git' 카테고리의 다른 글

[Git 빨]4. Remote Repository  (1) 2019.08.02
[Git 빨] 2. Git의 사용 이유와 기본적인 흐름  (0) 2019.07.19
[Git 빨]1. Git 설치하기  (0) 2019.07.12

+ Recent posts