소스트리 브랜치 관리

정태경·2022년 5월 15일
0
post-thumbnail

브랜치란

브랜치란 Git 사용에 있어서 가장 핵심적인 요소 중에 하나이다. 개인이 Git을 통해 버전 관리를 하는 상황에서 어떤 문제가 생겼다고 가정하면 Reset 또는 Revert 등의 기능을 활용하여 이전 상태로 되돌리면 되지만 대규모 프로젝트 또는 협업 상황에서는 이야기가 달라진다.

예를 들어 대규모 프로젝트에서 A라는 개발자가 변경 사항을 커밋 하였는데 다른 기능을 개발하던 개발자가 영향을 받는다면 어떻게 될까? 이러한 상황을 방지하고 여러 작업자가 협업할 수 있도록 만들어진 기능이 브랜치이다.

이해를 돕기 위해 브랜치에 대해 한 가지 예시를 들어보면, 내 로컬 디렉터리에 직박구리라는 프로젝트 폴더가 있다고 가정해 보자. 브랜치는 직박구리라는 완성본에 해당하는 프로젝트 폴더를 카피하여 독립적인 새로운 프로젝트 디렉터리를 생성하는 것이다.

그리고 완성본에 해당하는 직박구리폴더는 마스터 브랜치 또는 통합 브랜치라고 부르고, 직박구리로부터 분기되어 나온 브랜치들을 토픽 브랜치라고 부른다.

소스 트리에서 브랜치생성

소스 트리의 좌측 BRANCHES 메뉴에서 새로운 브랜치를 생성할 수 있다. 브랜치의 이름을 입력한 후 Create Branch 버튼을 누르면 Master와 동일하지만 독립된 하나이 토픽 브랜치가 생성된 것을 확인할 수 있다.

토픽 브랜치 및 마스터 브랜치 커밋

수정 사항을 마스터 브랜치와 토픽 브랜치에 각각 커밋 해보고 어떻게 표현되는지 확인해 보자. 아래 예시 사진을 보면 토픽 브랜치에 커밋 된 내역은 빨간 줄기로 뻗아 나와 그래프가 표현되고 있으며, 마스터 브랜치에 커밋 된 내역은 파란 줄기로 표현되고 있다.

마스터 브랜치를 클릭하여 이동해 보면 토픽 브랜치에 커밋 된 내역이 노출되지 않는다. 반대로 토픽 브랜치를 클릭하여 이동해 보면 마스터 브랜치에 커밋 된 내역이 노출되지 않는다. 이렇게 하나의 줄기에서 뻗어 나와 브랜치를 생성함으로써 코드 충돌 없이 작업의 연속성을 보장받을 수 있다.

브랜치 병합(Merge)

토픽 브랜치의 작업 내역을 마스터 브랜치에 병합하는 방법은 다음과 같다. 먼저 좌측 BRANCHES 메뉴의 마스터 브랜치로 이동한 후 병합하고자 하는 토픽 브랜치를 우클릭하여 Merge into master 를 클릭해준다.


병합하고나면 아래와 같이 그래프가 마스터 브랜치로 병합된 것을 확인할 수 있다.

브랜치 충돌(conflict)

아무런 충돌 없이 브랜치가 병합되면 가장 해피한 케이스이지만 브랜치 병합 과정에서 서로 다른 두 개의 브랜치가 같은 위치의 코드 수정이 있엇다면 충돌(conflict)가 발생하게 된다.

conflict가 발생하면 소스 트리 화면 상에서 아래와 같이 얼럿이 노출된다.


그리고 conflict가 발생하면 소스코드 상에 아래와 같이 충돌 난 부분에 대해 명시적으로 알려준다.

======= 기준으로 <<<<<<< HEAD 사이의 코드는 내가 선택한(checkout) 브랜치의 코드이고,

======= 기준으로>>>>>>> {토픽브랜치명} 사이의 코드는 병합하려 했던 토픽 브랜치의 코드이다. 따라서 conflict 발생한 코드를 보고 수정 후 다시 커밋 해주면 문제없이 병합할 수 있다.

if __name__ == "__main__":
<<<<<<< HEAD
    print("새로운 샘플 브랜치 생성 후 마스터 브랜치 커밋")
=======
    print("새로운 샘플 브랜치 생성 후 첫번째 커밋")

>>>>>>> SampleBranch2
profile
現 두나무 업비트 QA 엔지니어, 前 마이리얼트립 TQA 엔지니어

0개의 댓글