가장 많이 본 글

2014년 10월 6일 월요일

branch란??

아유... 내가 여지껏 git을 잘 모르고 사용했었구나 하는 생각이 든다.
먼저, 이 글은 git-scm.com을 읽으면서 배운 것이라는 것을 밝힌다.

branch가 무엇인가??
수정 작업을 하거나, customize 등 branch를 딴다?? 그냥 새로운 소스셋이 생겼다 정도로만 알고 넘어갔었는데.. 정확히 알 필요가 있다.


내가 이해한 것은
'branch는 pointer' 이다.
소스가 수정되는 history 상에서의 'stack의 top'과 같은 역할 정도 되겠다.


처음 git initialize 하면 git repository를 만든다.


$ git init

pic1
pic1과 같이 init을 하면 A라는 수정사항에 master라는 pointer가 생성된다.
여기에 수정사항을 하나 추가해보면
$ git add file1
$ git commit 
pic2

pic2 처럼 요런 모양이 되는것임. commit을 하면 B가 생성되고 master의 위치가 B로 바뀌었다!
혹시나 'branch에 소스를 저장한다'라고 생각하고 있었다면 이 소스 추가를 보고 '수정사항의 상태를 point 하고 있는 것이 branch이다'로 개념을 바꿔야 한다.

그럼, 여기서 'branch를 딴다'라는 것을 해보자. 사실 branch를 딴다라기 보다 생성한다는 말이 더 정확한 것이라고 생각한다. 예를 들어 B버전이 오류가 있어 수정이 필요하다면, forFix라는 branch를 만들어서 작업을 할 수 있다.
$ git branch -b forFix

pic3




pic3과 같이 'forFix라는 branch를 만들었다. forFix branch는 말그대로 pointer 하나 추가 된 것이다. source에는 변함이 없다.
이제 수정 작업을 하여 commit을 만들면,
$ git add file2
$ git commit
pic4
pic4와 같은 모양이 된다. master branch가 수정 되었나? 그렇지 않다. forFix만 수정이 되었으며, master에는 영향을 주지 않는다.여기서 누군가가 master branch에 upload를 했다고 한다면,
pic5
수정을 모두 마쳤다면, forFix의 수정 사항을 master에 merge를 해야 한다. C가 D 수정 사항에 영향을 받지 않는 commit이라면,
$ git checkout master
$ git merge forFix
pic6
E로 간단하게 merge가 된 것을 볼 수 있고, merge 명령은 branch -D(branch 삭제) 까지 함께 해준다. 즉 forFix branch는 사라진다.




    댓글 없음: