[git] Branch 가지치기

·2023년 3월 3일
0

Git

목록 보기
2/3

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 testmerge 해주고 $ 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를 해주는 게 가장 베스트이다.

profile
🙄

0개의 댓글