ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Git Branch
    기타/Git 2022. 8. 24. 20:36

    기본 개념

    Git은 소스코드 관리를 위한 분산 버전 관리 시스템으로, 하나의 프로젝트를 진행할 때 여러 팀원이 다 함께 작업하는 환경에서도 원활하게 소스코드 관리를 할 수 있도록 도움을 준다.

     

    동일한 소스코드를 가지고 팀원들은 각자 맡은 업무에 따라, 새로운 기능을 구현하거나, 기존의 버그를 고치거나 하는 식의 서로 다른 작업을 동시에 진행한다. 이렇게 여러 사람이 동일한 소스코드를 기반으로 해서 서로 다른 작업을 진행한다면, 이후의 결과는 진행한 작업의 수만큼 서로 다른 결과물이 나오게 된다.

     

    따라서 여러 개발자들이 동시에 다양한 작업을 진행하기 위해서는 독립적으로 작업을 하기 위한 공간이 필요하고, 이를 branch라고 한다. 하나의 나무 기둥에서 여러 나무줄기가 뻗어 나오듯이, 하나의 소스코드에서 여러 개의 branch가 만들어질 수 있다.

     

    이렇게 각 개발자들이 자신의 branch에서 맡은 역할을 잘 수행하고 나면, 해당 브랜치를 기존의 소스코드에 병합(Merge)할 수 있다. 이렇게 각 팀원들이 서로 자신의 독립된 branch에서 작업을 수행한 후, 이를 하나로 나중에 합치는 과정을 거치게 된다면, 동시에 여러 작업을 진행하더라도 서로가 서로에게 영향을 끼치지 않으며, 후에 작업 흐름을 한눈에 파악하기에도 편리한 이점이 있다.


    Branch 생성

    git init을 이용하여 git 시스템을 시작한다면, master라는 이름의 branch가 기본 branch로 설정되어 있을 것이다. 이를 가장 중심이 되는 branch로 하여, 각 팀원들이 여러 개별의 branch를 생성하고 전환할 수 있다.

     

    이때 branch를 생성하는 명령어는 git branch [브랜치명]이다.

    $git branch test

    만약 branch가 잘 생성되었는지를 확인하고 싶다면, 브랜치명 없이 git branch만을 사용하여 해당 저장소에 존재하는 branch들을 확인할 수 있다.

    $git branch
    * master
      test

    이때 현재 위치한 브랜치의 경우 *표시를 통해 확인할 수 있다.

    Error

    만약 branch를 생성하는 과정에서 아래와 같은 에러가 발생한다면, 최소 1번 이상의 commit을 진행하면 된다.

    한 번도 commit을 진행하지 않은 저장소에서는 branch를 생성하지 못하기 때문이다. (특정 순간의 소스코드를 기준으로 branch가 생성되어야 하는데, 한 번도 소스코드가 commit이 된적 없다면, 뻗어나갈 시작점조차 없는 상태이기 때문이다.)

    $git branch test
    fatal: not a valid object name: 'master'

     


    Branch 전환

    branch를 생성했다면, 해당 브랜치로 이동할 수 있어야 한다.

    브랜치의 이동은 git checkout 또는 git switch를 이용해 진행할 수 있다.

    git checkout

    기존에 사용하던 브랜치 이동방식으로, git checkout [브랜치명]의 형태로 명령어를 사용할 수 있다.

    $git checkout test
    Switched to branch 'test'

    이후 git branch 명령어를 이용해 확인해보면, 아래와 같이 test branch로 이동했음을 확인할 수 있다.

    $git branch
      master
    * test

    master브랜치에서 test브랜치로 이동

    git checkout -b

    git checkout 명령어에는 -b라는 옵션을 적용할 수 있다. 해당 옵션을 사용하면 브랜치를 새로 만들면서 동시에 변경할 수 있다.

    $git checkout -b test
    Switched to a new branch 'test'

    git switch

    Git 2.23 버전 이후로 checkout을 대신하게 된 새로운 명령어인 switch가 생겼다.

    기존의 checkout은 branch 전환과 working tree 복구의 기능을 동시에 가지고 있었는데, 이번에 새로 switch와 restore라는 명령어가 생기면서, checkout의 기능을 분리해서 물려받게 되었다.

     

    이러한 관계로 2.23 버전 이후에서 단순 branch 변경을 위해서는 switch 명령어를 사용하는 것을 추천한다.

    switch 명령어는 아래와 같이 git switch <브랜치명>의 형태로 사용할 수 있다.

    $git switch test
    Switched to branch 'test'

    git switch -c

    git switch 명령어에서도 git checkout -b와 같이 -c옵션을 적용해 브랜치를 새로 만들면서 동시에 변경할 수 있는 기능을 제공한다.

    $git switch -c test
    Switched to a new branch 'test'

    Branch 삭제

    branch의 삭제는 아래와 같이 git branch 명령어에 -d옵션을 지정해 실행할 수 있다.

    $git branch -d test
    Deleted branch test (was 2b0c1a1).

    Error

    만약 삭제하려는 branch에서 해당 명령을 실행한다면, 아래와 같은 error가 발생한다.

    $git branch -d test
    error: Cannot delete branch 'test' checked out at '/home/cookie/practice/git'

    이때는 git switch master와 같은 명령어를 통해, 삭제하려는 branch에서 먼저 벗어난 후 삭제를 다시 시도해야 한다.

    댓글