깃과 브랜치

eunsour 2020. 8. 14.
반응형

※ 브랜치란?

1. 브랜치가 필요한 이유

만약 새로운 기능을 추가했을 때 오류 없이 완벽하게 동작한다는 보장이 없다면 어떻게 해야 할까? 제대로 동작하는 소스는 그대로 둔 채 새 소스를 추가한 버전을 따로 만들어 관리하고, 완벽하게 완성한 다음 원래 소스에 더할 수 있다면 아주 편리하다. 이럴 때 사용하는 방법이 깃의 '브랜치(branch)'라는 기능이다.

 


※ 브랜치 만들기

1. 새 브랜치 만들기

$ git branch apple
$ git branch google
$ git branch ms
$ git branch

결과 >> master 앞에 * 는 아직 우리가 master 브랜치에서 작업하고 있다는 뜻

 

2. 브랜치 사이 이동하기 - git checkout

$ git checkout apple

결과 >> apple 브랜치로 체크아웃한다.


※ 브랜치 정보 확인하기

1. 새 브랜치에서 커밋하기

▶ 현재 저장소에서 수정된 파일을 한꺼번에 스테이지에 올릴 수 있다. - git add . (마침표)

$ git add .

▶ git log 명령을 사용할 때 --branches 옵션을 사용하면 각 브랜치의 커밋을 함께 볼 수 있다.

$ git log --oneline --branches

결과 >>

▶ 브랜치와 커밋의 관계를 좀 더 보기 쉽게 그래프 형태로 표시하려면 --graph 옵션을 함께 사용한다.

$ git log --oneline --branches --graph

결과 >>

 

2. 브랜치 사이의 차이점 알아보기

브랜치마다 커밋이 점점 쌓여갈수록 브랜치 사이에 어떤 차이가 있는지 일일이 확인하기 어려워진다. 이럴 때는 브랜치 이름 사이에 마침표 두 개(..)를 넣는 명령으로 차이점을 쉽게 확인할 수 있다. 

브랜치 이름과 마침표 사이는 공백없이 입력하며, 마침표 왼쪽에 있는 브랜치를 기준으로 오른쪽 브랜치와 비교한다.

$ git log master..apple

결과 >>


※ 브랜치 병합하기

만들어진 각 브랜치에서 작업을 하다가 어느 시점에서는 브랜치 작업을 마무리하고 기존 브랜치와 합해야 한다. 이것을 '브랜치 병합(merge)'이라고 한다. 

1. 서로 다른 파일 병합하기

▶ git init 다음에 디렉터리 이름을 입력하면 새로운 디렉터리를 만들고 저장소를 초기화하는 과정을 한꺼번에 처리할 수 있다.

$ cd ~
$ git init manual-2
$ cd manual-2
$ ls -al

결과 >>

 

(1) 빔에서 work.txt 파일을 만들고 '1'이라는 내용을 입력한 후 커밋한다.

$ vim work.txt
$ git add work.txt
$ git commit -m "work 1"

(2) o2라는 브랜치를 만든다. 

$ git branch o2

(3) 현재 master 브랜치에 master.txt라는 파일을 만들고 커밋한다.

$ vim master.txt
$ git add master.txt
$ git commit -m "master work 2"

(4) o2 브랜치로 체크아웃한다.

$ git checkout o2

(5) o2 브랜치에서 o2.txt라는 파일을 만들고 커밋한다.

$ vim o2.txt
$ git add o2.txt
$ git commit -m "o2 work 2"

(6) git log 명령을 사용해서 현재 커밋의 상태를 확인한다.

$ git log --oneline --branches --graph

결과 >> 

(7) o2 브랜치에서 작업이 다 끝났다고 가정하고, o2 브랜치의 내용을 master 브랜치로 병합한다. 브랜치를 병합하려면 먼저 master 브랜치로 체크아웃 해야한다.

$ git checkout master

(8) 브랜치를 병합하려면 git merge 명령 뒤에 가져올 브랜치 이름을 적는다. master 브랜치에 o2 브랜치를 가져와 병합하려면 다음과 같이 입력한다.

$ git merge o2

결과 >>

(9) ls -al 명령과 git log 명령으로 브랜치와 커밋들이 어떻게 병합되었는지 확인할 수도 있다.

$ git ls-al
$ git log --oneline --branches --graph

결과 >>

 

2. 병합이 끝난 브랜치 삭제하기

브랜치를 병합한 후 더 이상 사용하지 않는 브랜치는 삭제할 수 있다. 단, 이렇게 브랜치를 삭제하더라도 이 브랜치가 완전히 지워지는 것이 아니라 다시 같은 이름의 브랜치를 만들면 예전 내용을 다시 볼 수 있다.

$ git checkout master
$ git delete -d o2
저장소의 기본 브랜치는 master이므로 브랜치를 삭제하려면 master 브랜치에서 해야한다. 

 

3. 수정 중인 파일 감추기 및 되돌리기 - git stash

브랜치에서 파일을 수정하고 커밋하지 않은 상태에서 급하게 다른 파일을 커밋해야 할 경우 아직 커밋하지 않고 작업 중인 파일들을 잠시 감춰둘 수 있다.

$ git stash

급한 작업을 모두 마쳤다면 감춰둔 파일을 꺼내와 계속 수정하거나 커밋할 수 있다. git stash 명령 뒤에 pop을 추가하면 stash 목록에서 가장 최근 항목을 되돌린다.

$ git stash pop

 

 

 

Reference

 
Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문
저자 : 이고잉, 고경희
출판 : 이지스퍼블리싱
발매 : 2019.12.06

 

 

반응형

댓글