본문 바로가기

Programming/Git

[Git]branch(1) - git branch, git checkout

안녕하세요. 잇킹 시도르입니다.

깃 관련 내용을 검색하거나 학습하다 보면 '브랜치'라는 용어를 많이 접하실 겁니다.

 

이 브랜치라는 건 어떤 것일까요?

개발을 하다 보면 의도에 따라 여러 분기가 발생하게 될 겁니다. 그때 각각의 분기에 따른 소스 버전을 관리하기 위한 것으로 생각하면 될 듯합니다.

제가 봤던 유튜브에서는 브랜치를 개발 소스의 '평행우주'라고 표현하더라고요. 가장 이해가 쉬운 표현일 듯합니다.

 

실제 명령어를 통해서 브랜치를 알아보도록 하겠습니다.

 

현재 개발자 A는 git_test 프로젝트를 진행 중이며, test1/test2/test3 스크립트가 프로젝트의 결과물입니다.

 

 

 

개발자 A가 갑자기 새로운 아이디어가 떠올랐습니다. 그래서 현재 소스에서 몇 가지 방법으로 개발을 해보고 검토하고 싶습니다. 그런데 이 아이디어로 진행하다가 잘못되었을 때 소스를 다시 되돌릴 엄두가 안 나네요. 그리고 반영한 소스를 지우고 다시 원복 해서 다른 방법으로 진행하는 과정도 너무 귀찮습니다. 이때 사용하는 게 브랜치입니다.

 

먼저 현재는 어떻게 되어있는지부터 확인해보겠습니다.

git branch : 현재 프로젝트의 브랜치를 확인 
(sidorl) D:\My_DEV\py_prj\git_test>git branch
* master

 

결과가 master가 있고 그 앞에 * 표시가 되어있네요. 현재 별도로 작업을 한 것이 없는 상태입니다. 이 상황에서 기본 브랜치로 master가 있으며, 이게 선택된 상황이라는 것을 알 수 있습니다. 

 

이제 분기가 나뉘도록 브랜치를 새로 만들겠습니다.

git branch 브랜치명 : 브랜치 생성
(sidorl) D:\My_DEV\py_prj\git_test>git branch develop

(sidorl) D:\My_DEV\py_prj\git_test>git branch
  develop
* master

develop으로 브랜치를 새로 만들었습니다. git branch를 통해 확인해보니, develop이 생성된 것을 확인할 수 있습니다. 아직 master 브랜치가 선택된 상황이네요

git checkout 브랜치명 : 원하는 브랜치로 시점 변경
(sidorl) D:\My_DEV\py_prj\git_test>git checkout develop
Switched to branch 'develop'

(sidorl) D:\My_DEV\py_prj\git_test>git branch
* develop
  master

git checkout을 통해서 브랜치를 변경했습니다.

 

이제 develop 브랜치에서 개발자 A는 새로운 아이디어로 개발을 진행합니다.

 

 

test2를 삭제하고 test3 스크립트를 수정했습니다. 반영한 소스를 add 하고 커밋하겠습니다.

(sidorl) D:\My_DEV\py_prj\git_test>git add -A

(sidorl) D:\My_DEV\py_prj\git_test>git commit -m "delete_test2 revised_test3"
[develop e0e2ded] delete_test2 revised_test3
 2 files changed, 2 insertions(+), 2 deletions(-)
 delete mode 100644 test2.py

※커밋까지 꼭 완료해야 시점 전환이 자유롭습니다. 커밋을 하지 않으면 checkout을 해도 소스가 변환되지 않습니다.

 

개발 중에 다른 아이디어를 적용하기로 했습니다.

다시 최초 master 소스로 되돌아 간 후에 다른 브랜치(develop2)로 분기하겠습니다.

(sidorl) D:\My_DEV\py_prj\git_test>git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

(sidorl) D:\My_DEV\py_prj\git_test>git branch
  develop
* master

(sidorl) D:\My_DEV\py_prj\git_test>git branch develop3

(sidorl) D:\My_DEV\py_prj\git_test>git checkout develop2
Switched to branch 'develop2'

(sidorl) D:\My_DEV\py_prj\git_test>git branch
  develop
* develop2
  master

 

▲master 브랜치로 변경된 것을 확인

 

 

develop2 브랜치에서는 test3을 삭제하고 test2를 수정했습니다.

 

 

커밋까지 완료했습니다.

(sidorl) D:\My_DEV\py_prj\git_test>git add --all

(sidorl) D:\My_DEV\py_prj\git_test>git commit -m "develop2 first commit"
[develop2 b69f162] develop2 first commit
 3 files changed, 3 insertions(+), 2 deletions(-)
 delete mode 100644 test3.py
 create mode 100644 test4.py

 

소스 비교를 위해 다시 develop 브랜치로 시점을 변경합니다.

 

 

 

이처럼 브랜치를 통해서 자유롭게 소스의 분기를 왔다 갔다 하면서 진행할 수 있게 되는 거죠.

브랜치의 흐름을 보면 다음과 같습니다. 브랜치를 통해 각각의 개발을 계속 진행할 수 있게 됩니다. 각 시점을 계속 바꿀 수도 있고요.

 

▲브랜치의 의미

 

 

이상입니다!!!