branch
branch란 독립적으로 작업을 하는 하나의 가지 라고 생각하면 된다.
내가 작업을 하는데 같은 프로젝트에 누군가도 같이 작업을 해야하는 상황에서 둘이 서로에게 영향을 주고 받지 않게 하기 위해 각자의 브랜치 위에서 작업을 마친 뒤 한꺼번에 merge 한다.
가장 흔한 모습은 master branch에서 가지를 치고 작업이 끝나면 merge를 하는 형태이다.
알고가야 할것
git branch
브랜치를 만드는 명령이다.
새로 만든 브랜치는 지금 작업하고있던 마지막 commit을 가르킨다.
head 포인터
지금 작업중인 브랜치가 무엇인지 git은 어떻게 파악할까?
바로 head라는 특수 포인터가 있다.
이 포인터는 지금 작업하는 로컬 브랜치를 가르킨다.
git checkout
브랜치를 이동하는 명령이다.
정확히는 head포인터를 해당 브랜치의 젤 최근 커밋으로 이동시키는 명령이다.
git merge
해당 브랜치를 현재 브랜치로 병합(merge)하는 명령이다.
가지 확인
jhkim 프로젝트이다. 현재는 아직 master 브랜치만 존재하고 있다.
이제 branch를 하나 생성시킨다.
git branch branch1
아직 head포인터를 바꾸지 않아 아직 master 브랜치를 가르키는 모습이다.
head 포인터를 바꾼다
git checkout branch1
head 포인터가 branch1 브랜치를 가르키는것을 볼 수 있다.
이제 가지가 생겨 나가는 모습을 보기위해 branch1 브랜치에서 작업을 하겠다.
가지 치고 나가기
branch1 브랜치에서 test1이라는 파일을 하나 만든 후 커밋했다.
보다싶이 master 브랜치에서 branch1이라는 가지 하나가 뻗어나간것을 볼 수 있다.
이제 이 branch1이라는 로컬 브랜치를 git directory로 올려야 한다.
git push origin branch1
명령을 통해 origin remote의 branch1이라는 브랜치로 push를 하겠다.
이제 진행을 해보며 가지가 갈라지는 모습을 보도록 하자.
갈라지는 가지
branch1이라는 브랜치에서는 현재 작업을 통해 가지를 치고나갔다.
이제 master브랜치에서도 작업을 해 브랜치끼리 서로 다른 작업이 진행하면 어떻게 되니 지켜보자.
master 브랜치에서는 test2라는 파일을 만들어 커밋 후 push 했다.
이제 그림으로된 브랜치들 보자.
처음 시작이였던 add README.md commit에서 branch1과, master브랜치가 갈라지는 모습이다.
이제 저 브랜치들은 서로에게 간섭하지 않고 본인들의 작업을 진행할 수 있다.
합쳐지는 가지 merge
이제 갈라지는 과정을 봤으니 merge과정을 살펴보도록 하겠다.
병합은 인수할 branch에서 진행하면 된다.
git merge <병합할 branch>
나는 master <- branch1로 병합을 할 생각이므로 master 브랜치에서 merge를 진행한다.
git merge branch1
해당 명령을 실행하면 commit할때와 같이 에디터가 뜨고 여기에 메모할 내용을 적으면 된다.
저장 후 나가기를 하면 자동 커밋된다.
이제 내용을 push해 그림으로 살펴보자.
아까까지 갈라져있던 branch가 하나로 합쳐진 모습이다.
주의사항
현재작업은 각 브랜치가 서로에게 영향을 주지 않는 상황이였다.
branch1은 test1이라는 파일을 만들고 master 브랜치는 test2라는 파일을 만들어 서로에게 전혀 영향이 가지 않는 상황이라 한번에 merge 되었지만 실제로는 이런일만 있는건 아니다. 그럼 만약 서로 같은 파일을 수정하게 되면 어떻게 될까?
충돌관리
만약 branch끼리 서로 같은 파일을 수정 후 merge를 하면 어떻게 될까 한번 해보도록 하자.
conflictex, master 두 브랜치 다 test1.txt 파일의 같은곳을 수정했다.
이제 merge 해보도록 하자.
충돌이 일어나고 다음과 같은 문구가 뜬다.
test1.txt 파일을 확인해 보면
다음과 같은 모습인걸 볼 수 있다.
<<< HEAD
여에 있는 내용은 합병을 실시할 branch에서의 내용
=======
여기에 있는 내용은 합병이될 branch의 내용이 있다.
>>>>>>
여기를 개발자기 직접 수정 또는 새로 작성을 해준 후 합병을 진행하면 된다.
직접 수정 후 commit을 통해 합병을 한 모습이다.