$ 개발 환경은 맥 OS Catalina임을 알려드립니다 $

깃의 대표적인 기능에는 브랜치(branch)가 있습니다.

 

자신의 데이터 흐름을 알기 가장 좋은 방법 중 하나이기 때문이죠.

 

오늘은 깃에서 브랜치를 만들고 관리하는 방법을 알아보겠습니다.

 


우선 브랜치(branch)가 무엇인지 알아야 왜 만들고 관리하는 지를 알 수 있겠죠?

 

스마트폰의 제품 설명서를 만드는 회사를 설립했다고 생각해봅시다.

 

여러분에게 Apple에서, 삼성에서 연락이 왔습니다. 생각만 해도 꿈만 같죠?

 

아이폰과 갤럭시의 설명서 모두를 만드는 방법은 두가지가 있습니다.

1. 각 각의 설명서를 처음부터 만든다.

2. 공통적인 설명서를 만들어 두고 그 기반에 각자 특별한 기능의 설명서를 만든다.

스마트폰에는 기본적으로 베이스로 깔고가는 기능들이 있습니다. 전화, 문자, 인터넷, 그 외 등등... 

 

동일한 기능의 설명을 또 작성할 필요는 없죠.

 

즉 2번의 방법대로 기본 설명을 만들고 거기서 가지치기를 해서 각자의 특징을 살린 설명서를 만드는 겁니다.

 

이렇게 가지치기를 하기 때문에 branch!라고 합니다.

 

효율성과 파일의 훼손을 막아주는 역할을 하는 것이지요.

 

그리고 데이터관리의 가장 중요한 0순위는 데이터의 중복 관리입니다.

 

당연히 이렇게 데이터를 만들면 데이터 중복도 관리가 되기 마련이죠.

 

Git의 1차 목표는 "파일의 버전 관리"임을 잊으시면 안 됩니다.


대충 브랜치에 대해서 설명을 해드렸으니 이제 브랜치를 만들어 봅시다.

 

설명서 만드는 회사라 생각해보고 해 봅시다.

 

저는 phone-manual이라는 깃을 만들고 초기화를 했습니다.

 

우선 기본 설명서를 만들어 봅시다.

이렇게 한 줄씩 띄어서 적어주세요~ 이유는 나중에 설명드리겠습니다.

 

스테이징 후 커밋을 진행해 주시고 로그로 잘 올라갔는지 확인해주세요.

 

몇 가지 사항을 빼먹었다고 생각하고 두 번 수정과 커밋을 해줍시다.

 

똑같이 한 줄씩 구분해서 두 가지 내용을 추가해주세요. 저는 유튜브 기능과 카카오톡 기능을 넣었습니다.

 

이제 apple과 삼성의 설명서를 만들 겁니다.

 

브랜치 이름은 뭐 apple, samsung이 좋겠죠? 그 안에서 아이폰, 갤럭시의 버전을 나눠도 괜찮으니까요?

 

git에서 브랜치를 확인하는 명령어는 아래와 같습니다.

< Terminal Code >

$ git branch

브랜치 명령어를 입력하면 아마 master만 있을 겁니다. 가장 기본적으로 만들어지는 것이 master이기 때문입니다.

 

 이제 브랜치를 만들어 봅시다. apple을 먼저 만들고 삼성을 만듭시다.

 

< Command >

$ git branch [branch-name]

< Terminal Code >

$ git branch apple

브랜치 명령어로 잘 만들어졌는지 확인해봅시다.

 

다행히 잘 만들어졌습니다. 기본 명령어 입력창에서는 브랜치가 만들어져도 티가 안 나지만 커밋 로그 창에서는 차이가 발생을 합니다.

 

왜냐하면 어떤 위치에 무슨 파일이 있느냐가 중요하니까요.

 

git log명령어로 로그 확인을 해봅시다.

 

기존에 HEAD -> master라고 적힌 곳에 master, apple이라고 적혀있네요!

 

이 의미는 다음과 같습니다.

1. git 저장소에 master와 apple이라는 두 개의 저장소가 있다.

2. 현재 작업하고 있는 저장소는 master 브랜치이다.

똑같은 방법으로 삼성 브랜치도 만들어 봅시다. 만들고 확인도 한 번씩 해주세요.

 


 

브랜치가 여러 개 만들어지면 브랜치 사이에서 이동도 가능합니다.

 

브랜치 간의 이동은 어떻게 하고 브랜치 형성 정보는 어떻게 확인하는지 알아봅시다!

 

브랜치에 따라 어떻게 되는지 확인하기 위해 공통 설명서에 1가지 기능을 더 넣고 커밋을 합시다!

 

< Terminal Code >

$ git log --oneline

위 코드를 입력하면 커밋 로그를 1 커밋/1줄로 보여주기 때문에 간편하게 확인 가능합니다.

 

방금 지도 기능을 추가하고 커밋을 시킨 결과입니다.

 

master branch에는 지도 기능까지 업데이트되었지만 삼성과 애플에는 카카오톡까지만 존재하네요.

 

즉 가지치기하는 순간이 굉장히 중요합니다.

 

지도 기능을 기본에 추가를 했으니 삼성과 애플도 추가를 해줘야겠죠? 각 브랜치로 이동을 해서 기능 추가를 해줍시다.

 

< Command >

$ git checkout [branch-name]

< Terminal Code >

$ git checkout apple

체크아웃을 진행하면 커맨드 창에 브랜치 위치가 master에서 apple로 바뀌어 있을 겁니다.

 

oneline으로 로그를 확인해보면 커밋 해시가 지도를 업데이트하기 전으로 되어있음을 알 수 있습니다.

 

내용 확인으로 한 번 직접 확인해봅시다.

이와 같이 브랜치를 형성할 당시의 파일로 분기(branch)되었기 때문에 apple 브랜치에 지도 기능이 적혀있지 않게 되었습니다.

 

애플에 들어가는 기능을 두 가지 적어주고 커밋을 해봅시다.

 

일단 지도 기능을 적어주고, 애플의 대표 기능으로는 Face ID로 해볼까요?

 

근데 지도는 모든 폰의 공통이니 base.txt에 적어주시고 Face ID는 apple_manual.txt를 만들고 적어줍시다.

apple_manual.txt

수정된 2개의 파일을 동시에 스테이징하고 커밋을 합시다.

< Terminal Code >

$ git add .

위와 같이 입력하면 수정된 파일을 한꺼번에 스테이징 단계로 올려줍니다.

 

저는 apple manual 1으로 커밋을 해줬습니다.

 

apple 브랜치에 apple_manual과 수정된 base가 올라간 것을 확인할 수 있습니다.

 

git log 옵션을 잘 활용하면 시각적으로 볼 수 있습니다.

< Terminal Code >

$ git log --oneline --branches // 각 브랜치의 커밋을 볼 수 있습니다.
$ git log --oneline --branches --graph    // 브랜치 연결관계를 모식도로 보여줍니다.

그래프 옵션을 사용하면 아래와 같이 나옵니다.

 

정말로 가지가 연결된 것처럼 나오네요? 동일한 방법으로 삼성도 해봅시다!

 

우선 git checkout samsung으로 이동합니다.

 

갤럭시 특징은 빅스비로 해봅시다! 지도 기능은 base에, 빅스비는 samsung_manual로 합시다!

 

모든 과정이 끝나고 그래프로 확인해 봅시다!

이렇게 브랜치가 많아지면 브랜치 간의 차이점을 알아야 합니다.

 

브랜치 간의 차이점을 알 수 있는 방법도 있습니다.

< Command >

$ git log [branch1]..[branch2]

< Terminal Code >

$ git log samsung..apple

위와 같이 코드를 입력하면 branch 2에는 있고 branch 1에는 없는 커밋을 보여주게 됩니다.

 

이렇게 브랜치를 기초적으로 다루는 법을 알아봤습니다.

 

다음에는 브랜치 병합과 브랜치 관리를 알려드리겠습니다.

 

 

반응형