목차

- 브랜치 개념

- 브랜치 만들기

- 브랜치 병합하기

- 충돌 해결하기

- 브랜치 재배치하기

 

<브랜치 개념>

브랜치 : 버전의 분기

master 브랜치 : 최초의 브랜치

HEAD : 현재 작업 중인 브랜치의 최신 커밋

체크아웃 : 특정 브랜치에서 작업할 수 있도록 작업 환경을 바꾸는 것

(master 브랜치로 체크아웃을 한다 = HEAD가 master 브랜치의 최신 커밋을 가리킨다)

 

브랜치 이름은 암묵적으로 정해져있다.

feature/<새기능> : 새로운 기능을 개발하기 위한 브랜치 ex) feature/menu

release/<릴리스 번호> : 릴리스를 준비하기 위한 브랜치 ex) release/2.3.0

hotfix/<수정 사항> : 급하게 수정해야 하기 위한 브랜치 ex) hotfix/login

 

 

<브랜치 만들기>

먼저 저장소에 파일 a, b, c를 추가한 상태이다.

브랜치 버튼을 누르고 이름을 적는다. (책에서 브랜치명을 foo랑 bar로 쓰던데 왜일까. foobar-O panda? 유래를 검색해보니 아무도 모르는 듯 하다.)

'새 브랜치 체크아웃'에 체크를 하면 작업환경을 새 브랜치로 바꾼다는거다.

 

foo 브랜치 작업환경에서 파일탐색기에 d_foo, e_foo 파일을 추가했다.

 

왼쪽 브랜치 하단에 foo 옆에 동그라미 표시가 되어있는 것을 확인할 수 있다. 여기서 master 브랜치를 더블클릭하면 HEAD가 master로 바뀐다.

 

그러면 이렇게 d_foo, e_foo가 추가되기 전인 상태가 된다. 따란~

 

 

<브랜치 병합하기>

빨리 감기 병합 (fast foward merge) : 변화가 없었던 브랜치가 마치 빨리 감기 하듯 업데이트되는 병합 기법.

(예를 들어 위 상황에서 master에는 새로운 브랜치가 생긴 이후에 추가적인 커밋이 일어나지 않았기 때문에, foo 브랜치를 master 브랜치로 병합할 경우 master 브랜치는 foo 브랜치와 같은 모양이 된다.)

 

브랜치 bar를 추가한 상태이다. (bar에는 d_bar 파일이 추가되어있음)

 

 

foo브랜치를 master 브랜치로 병합할 것이다. master로 체크아웃 된 상태에서 'foo' 우클릭 -> 현재 브랜치로 'foo' 병합

이러면 master = foo 가 된다. (동일하다는 거 아니고 대입(=)의 의미)

이런 식으로 완전히 동일해진다면 굳이 브랜치가 같은게 2개 있을 필요가 없다. 즉 foo를 잘라내는 작업을 한다.

 

아래엔 브랜치 삭제하는 방법 2가지가 있다. 

방법1.

방법2.

 

병합을 하는 다른 방법도 있다.

위의 탭에서 '병합'을 누르고, 커밋을 클릭한 뒤 확인을 누르면 된다. (마찬가지로 병합이 필요한 곳에서 먼저 체크아웃을 한다.)

예를 들어 4번 커밋을 병합할거면 4번 커밋을 누르고 확인, 4~6번 커밋을 모두 병합할 거면 6번 커밋을 누르고 확인하면 된다.

 

<충돌 해결하기>

저장소 비우고 다시 만듦. master와 slave 브랜치가 있다. 

저장소에는 a.txt가 있는데 원래 'fisrt'라는 문자열이 있었으나 master에서는 'master'로, slave에서는 'changed'로 바꾸었다.

이 상태에서 master와 slave를 병합해보면 아래와 같이 뜬다.

 

충돌이 되었다고 한다. 닫기를 누르면 아래와 같이 변한 것을 확인할 수 있다.

밑에 있는 스테이지에 올라가지 않은 파일 a.txt를 누르면 오른쪽에 내용이 이렇게 뜬다.

<<<<<<HEAD

master

이건 현재 체크아웃한 공간에서 충돌이 일어나는 곳의 내용이 'master'라는 것을 의미

 

changed

>>>>>>slave

이건 slave 브랜치에서 충돌이 일어나는 곳의 내용이 'changed'라는 것을 의미한다.

 

=======를 기준으로 위랑 아래 중 뭘 선택할 지는 우리가 선택할 몫이다.

 

master 내용으로 바꾸는 선택을 했다. a.txt 우클릭 후 충돌해결->'내것'을 이용해 해결을 누른다.

(현재 체크아웃된 브랜치로 선택)

slave 내용으로 바꾸는 선택을 한다면 아래의 '저장소'것을 사용하여 해결을 누르면 된다.

 

'내것'을 이용해 해결 : 현재 체크아웃된 브랜치의 내용을 병합에 반영

'저장소'것을 사용하여 해결 : 병합하려는 브랜치의 내용을 병합에 반영

그러고 나면 아래와 같이 자동으로 커밋 메시지가 생성되는데 걍 커밋하면 된다.

 

 

<브랜치 재배치하기>

재배치를 위해 일단 저장소는 아래와 같이 설정했다.

master 브랜치에 a.txt, b.txt를 추가한 내용 커밋.

slv 브랜치에 c_slv.txt, d_slv.txt를 추가한 내용 커밋.

master 브랜치에 c.txt, d.txt를 추가한 내용 커밋.

 

master는 a, b, c, d가 있고 slv는 a, b, c_slv, d_slv가 있는 상황.

여기서 slv를 master의 4번 커밋(d 다음)으로 브랜치를 재배치하려고 함.

slv로 체크아웃한 상태로, 재배치 하려는 커밋에 우클릭->재배치를 누른다.

 

그러면 아래와 같이 재배치된 것을 확인할 수 있다. slv는 a, b, c, d, c_slv, d_slv가 있는 상태가 된다. (master는 당연히 그대로이다.)

 

이 경우 slv에 처음에 c.txt, d.txt가 아닌 c_slv.txt, d_slv.txt로 만들어줬기 때문에 파일명이 달라서 충돌이 일어나지 않았다. 그러나 같은 이름의 파일이 있을 경우 충돌이 발생할 수 있음.