본문 바로가기
개발 Story/Git & GitHub

Git branch 생성 및 checkout,merge

by niee 2017. 12. 4.
반응형

Git 사용시 장점중 하나가 branch를 사용한 편한 버전 관리와 이슈 해결이라고 생각한다.

branch는 git의 HEAD가 위치한 부분에서 새로운 분기점을 만드는 기능인데 

branch를 만들면 언제든지 쉽게 파일들을 해당 버전으로 변경 할 수 있다.


ex)운영용branch, 개발용branch, 이슈해결용branch


일단 branch의 생성 방법은 branch를 만들 커밋 지점으로 이동 후 


 
1.> git branch branch_name

2.> git checkout -b branch_name

이렇게 두가지방법이 있다.


1번의 경우 현 커밋 시점에서 branch_name을 가진 branch를 생성만 하는것이고

2번의 경우는 branch를 생성과 함께 해당 branch로 이동하는 것이다.


checkout 의 경우에는 git의 HEAD위치를 변경 시키는 명령어 인데 

기본적으로 branch_name을 입력하면 해당 branch로 이동, 

또는 commit hash를 이용해 자신이 원하는 commit 지점으로 이동할수 있다.


위의 branch 생성 예제의 1번으로 branch를 생성 후 해당 branch로 이동하는 방법은


 
> git checkout branch_name


으로 이동할 수 있다.


또는 git log를 입력 후 아래와 같이 로그가 나온 상태에서 

 
> git log

commit dcee2aeb4eaffafbcfe6b3000d0ed412f9c11dd5
Author: ParkMinkyu <niee@naver.com>
Date:   Mon Dec 4 09:47:16 2017 +0900

    update

commit d231e706475513c4444f53fa2e506e162a29666a
Author: ParkMinkyu <niee@naver.com>
Date:   Mon Dec 4 09:43:43 2017 +0900

    test
commit hash의 앞부분 4자 이상을 입력하여 해당 커밋시의 위치로 이동할 수있다.
 
> git checkout dcee2

Note: checking out 'dcee'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at dcee2ae... update
이렇게 HEAD의 위치가 변경이 되면 쉘의 옆에 (dcee2...)처럼 현재 HEAD의 위치가 표시된다.



 
park@park-PC MINGW64 ~/git/gittest ((dcee2ae...))


이렇게 HEAD가 이동된 상태에서 branch를 생성하게 되면 현재 위치의 commit 시점에서 새로운 branch가 생성된다.

이슈가 발생했을때 이런식으로 원하는 커밋시점으로 돌아가 branch를 만들면 해당 부분만 수정이 가능하고 빠르게 merge할 수 있다.


branch를 생성후 작업을 하다가 작업이 완료되어 master branch로 합쳐야 할 경우는 우선 master branch로 이동 후


 
> git checkout master

> git merge branch_name

Updating 4578f2c..b782127
Fast-forward
 test.txt | 1 +
 1 file changed, 1 insertion(+)


처럼 하면 된다.


현재 branch에서 branch_name을 가져온다고 생각하면 될것 같다.



자세한 사항은


https://git-scm.com/book/ko/v1/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge%EC%9D%98-%EA%B8%B0%EC%B4%88


요기 참조

반응형