branch
는 프로젝트 협업에 있어 큰 역할을 합니다.
메인 프로젝트와 독립적으로 나누어(=branch)
각자 역할을 수행한 이후 최종적으로 메인(=master)
과 병합을 한다. 이 같은 과정을 협업
이라 한다. branch는 다른 branch끼리도 영향을 주지 않기 때문에 여러개 작업이 가능하다.
branch 영역은 크게 3가지 이다. master 영역
은 master branch로 실제 배포가 가능한 안정적인 파일들을 넣어둔다. develop
은 branch 작업을 통해 수정, 삭제, 추가 작업을 진행하고 테스트까지 마무리되면 최종적으로 master branch에 병합된다. topic
은 develop에서 기능, 작업단위로 쪼개서 독립된 공간에서 작업을 하고 병합한다.
01. git branch 생성하기
$ git branch <branch명>
branch 확인하기
$git branch
$ git branch test
를 입력해 test branch
를 생성한다. 현재는 master branch로 설정이 되어있다. test branch로 이동하여 독립적으로 작업을 해주고 merge 작업까지 진행해보려 한다.
02. branch 전환하기
checkout
명령어를 통해branch
를 전환할 수 있다.$ git checkout <branch명>
master branch 상태입니다. 이제 test branch로 전환해서 독립적으로 파일을 추가하는 작업을 진행합니다.
master -> test branch
로 전환 (head 포인트 이동)
현재 test branch에 branch
폴더를 생성했습니다.
test branch에 새로 작업한 branch/index.html
에 대해서 commit
작업이 필요합니다. add로 staged에 올리고 committed 작업까지 완료합니다.
💡 branch라는 폴더는 test
브랜치라는 독립적인 공간에서 생성한 파일이므로 다시 master
branch로 checkout
하면 어떤 변화가 올까?
03. Merge
merge
명령어를 사용하며 현재 위치에서 합칠branch명
을 입력합니다.$ git merge <branch명>
$ git checkout master
를 통해 master branch로 전환했을 때 test branch에서 추가했던 파일은 보이지 않아요. 당연히 test branch는 독립적인 작업공간이기 때문입니다. test에서 작업한 내용을 이제 master에 병합
하는 작업이 필요합니다.
$ git merge test
로 merge
해주고 $ git log
확인해보면 두 branch가 정상적으로 합쳐진 것을 볼 수 있습니다. 이제 master branch에서도 branch 폴더를 확인할 수 있습니다.
병합 작업(merge)
을 할때 다른 branch에서 같은 파일에 대한 수정이 일어난다면 병합할 때 충돌이 발생하게 됩니다.
(같은 파일을 건드리지 않으면 충돌이 발생하지 않음)
mater branch
에서 branch/index.html
background-color와 box내 텍스트 변경 commit 작업 완료
test branch에서 branch/index.html
width 값과 div.박스 추가 commit 작업 완료
해당 작업을 진행하고 merge
하면 충돌 오류로 작업이 불가능합니다.
자동적인 merge
는 불가능하니 두 코드 중 원하는 쪽으로 선택 아니면 두 코드를 적절하게 섞어서 작성하는 방법으로 직접 작업을 진행해야합니다.
다음과 같이 합쳐진 index.html이 생성되고 필요한 부분을 남기고 삭제하는 수동 작업을 통해 충돌을 해결합니다. 수정 후 commit 작업 후 다시 Merge를 진행합니다.
충돌의 경우 생긴다면 수동으로 해결이 가능하지만 가능한 발생하지 않도록 예방이 필요하다. 최대한 master branch는 안정적인 파일을 가지고 있기 때문에 수정은 진행하지 않는 것이 좋다. 개발 및 수정이 필요하다면 branch를 생성해서 작업을 하고 merge를 해주는 게 가장 베스트이다.