300x250

 

목차

     

    연구를 하다보면 필연적으로 협업을 하게 되는데, git을 활용하면 main branch를 나누어 팀원들이 각자 branch를 파서 맡은 부분을 구현하고, main에 merge하는 것(합치는 것)이 안전하다. (개발을 할 때에는 issue를 다루기 위해 사용하기도 하는데, 이는 gitflow를 다루 때 자세히 알아보기로 한다.)

    이번 포스팅에서는 브랜치를 만들고, 로컬에서 기본 브랜치를 설정 및 변경하는 방법을 알아보려 한다.

     

     

     

     

    Git branch 주요 명령어

     

    git branch

    이 명령어는 다양한 옵션을 통해 branch 생성, 제거, 상태 확인 등을 할 수 있는 명령어이다. (remote repository 브랜치의 생성은 경우 github에서 'new branch'를 눌러 더 직관적으로 할 수 있다.)

    아무 옵션을 주지 않으면 '-l'이 생략된 것으로, 로컬의 branch 정보(remote repository의 branch 정보가 아님에 유의하자!)를 보여준다.

     

    Fig 1. git branch result

     

    옵션에 따른 다양한 명령어를 살펴보자.

     

    -v

    git branch -v

    로컬 branch들의 마지막 커밋 내역을 보여준다.

     

    -r

    git branch -r

    Remote repository의 branch 정보를 보여준다.

     

    -a (★★★)

    git branch -a

    Local, remote repository의 모든 branch 정보를 보여준다.

    Local branch는 이름만, remote branch는 'remotes/origin/...'와 같은 형식으로 표시된다.

     

    Merge된 branch, merge되지 않은 branch 표시

    git branch --merged
    git branch -no-merged

    merge된(--merged)/merge되지 않은(-no-merged) 브랜치를 표시한다.

     

     

     

    브랜치 생성, 이동, 이름 변경

     

    git branch [로컬브랜치명]
    git push origin [리모트브랜치명]

    '로컬브랜치명'에 해당하는 새로운 branch를 로컬에 생성한다. Remote branch는 push 명령어로 생성할 수 있다.

     

    git checkout -b [로컬브랜치명]

    생성과 동시에 해당 branch로 이동한다.

     

    git checkout -b [로컬브랜치명] [리모트브랜치명]

    Remote repository의 '리모트브랜치명' 브랜치와 연결된 '로컬브랜치명' 브랜치를 로컬에 생성하고, 이동한다.

     

    git branch -m [변경할 브랜치명] [변경될 브랜치명]

    로컬의 '변경할 브랜치명' 브랜치를 '변경될 브랜치명' 브랜치로 이름을 변경한다.

    옵션으로 -M을 사용할 경우, 기존에 동일한 이름의 branch가 있어도 덮어쓴다.

     

    현재 브랜치에서 commit하지 않은 변경 사항을 새로운 branch로 옮겨 작업하고 싶을 때가 있다. 그럴 때는 아래와 같이 stash 명령어를 사용한다. stash는 마무리하지 않은 작업을 스택에 잠시 저장하는 명령어이다. 완료하지 않은 일을 commit하지 않고 나중에 stash pop 명령어로 꺼내올 수 있는데, 이를 이용하여 다른 브랜치로 변경 사항을 옮길 수 있다.

    git stash --include-untracked
    git checkout -b [다른 로컬 브랜치]
    git stash pop

    --include-untracked는 track되지 않은 파일, 즉 새로 생성된 파일까지 모두 스택에 저장하는 옵션이다. 옵션을 주지 않으면 새 파일은 옮겨지지 않고 수정된 파일만 저장된다.

    checkout으로 '다른 로컬 브랜치'를 생성한 후 이동하며, 그곳에서 stash pop을 통해 스택에 저장된 변경 사항을 불러온다. 기존 로컬 브랜치에는 변경 사항이 사라지게 된다.

     

     

    브랜치 삭제

     

    git branch -d [로컬브랜치명]
    git push origin -d [리모트브랜치명]

    로컬 브랜치 혹은 리모트 브랜치를 삭제한다. 로컬 브랜치의 경우, 아직 commit merge를 하지 않았다면 삭제되지 않는데, 이때 -D 옵션으로 강제 삭제할 수 있다.

     

     

     

     

     

     

     

     

    Remote와 local branch 연결

     

    로컬의 branch와 remote repository의 branch의 연결과 관련된 명령어를 알아보자.

     

    git fetch origin

    원격 저장소(origin)의 변경 사항을 확인한다. 사실 git pull 명령어는 git fetch와 git merge가 합쳐진 명령어이다. 즉 변경 사항(최신 데이터)을 복사하여 로컬 git에 가져온다.

    원격 저장소에 변경 사항이 존재하는 상황에서 pull을 바로 실행할 경우, 현재 브랜치와 작업 복사본의 파일이 변경되는 동시에 새로 작업한 내용은 손실될 수 있다. 따라서 fetch로 변경 사항을 먼저 확인한 후에 pull을 실행하자.

     

    git branch -u origin/[리모트브랜치명] [로컬브랜치명]
    git branch --set-upstream-to origin/[리모트브랜치명]

    로컬의 '로컬브랜치명' 브랜치(혹은 현재 로컬 브랜치)가 'origin' remote repository의 '리모트브랜치명' 브랜치를 트래킹하도록 설정한다. 쉽게 말해 local 브랜치를 remote 브랜치와 연결해주는 과정이다.

     

    예를 들어, local에서 새로운 branch "test_branch"를 생성하고, 같은 이름의 branch를 remote에도 생성한 후, 연결하려면 아래의 순서대로 명령어를 입력한다.

    git checkout -b test_branch # 로컬 브랜치 "test_branch" 생성 후 해당 브랜치로 이동
    git push origin test_branch # 리모트 브랜치 "test_branch" 생성
    git branch --set-upstream-to origin/test_branch # 현재 브랜치("test_branch")를 리모트 브랜치 "test_branch"와 연결

     

    결과 예시는 다음과 같다.

    Fig 2. Result of the connection between local branch and remote branch

     

     

    728x90
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기