본문 바로가기
코딩해보니/Git

[Git_28] 브랜치(Branch) 이동(checkout)

by 위시랜 2022. 12. 28.

브랜치 이동하기(checkout)
브랜치 이동하기(checkout)

브랜치(Branch) 이동(checkout)

브랜치는 작업자라고 생각하면 이해가 쉬울 것이라 얘기했습니다.

 

나는 어느 작업자(브랜치)를 컨트롤할 것인지 정해야 합니다.

동시에 두 개 이상의 작업자(브랜치)를 컨트롤할 수 없습니다.

그렇기 때문에 자신이 어느 브랜치에서 작업을 하는지 확인을 해야 하고,

또 자신이 원하는 브랜치로 이동을 할 수 있습니다.

 

앞서 소스트리에서 브랜치를 만들 때,

새 브랜치 체크아웃
새 브랜치 체크아웃

이 옵션이 있었습니다.

 

이 옵션에 체크를 하고 생성했더니 브랜치가 만들어 지고,

바로 새로 만든 브랜치가 선택되었습니다.

이 옵션에서 “체크아웃” 이라는 용어를 사용했습니다.

바로 브랜치를 이동하는 명령어가 checkout입니다.

 

터미널에서 현재 작업중인 브랜치는 경로 뒤에 표시가 되어 바로 확인이 가능합니다.

현재 브랜치 확인하기
현재 브랜치 확인하기

이동하기 전에 어떤 브랜치들이 있는지 $ git branch 명령어로 확인도 할 수 있습니다.

 

hotfix 브랜치로 이동하기 위해서는 $ git checkout hotfix 라고 하면 됩니다.

브랜치 이동하는 명령어의 사용법은 다음과 같습니다.

# 브랜치 이동하기
$ git checkout <브랜치 이름>

# 이전(직전) 브랜치로 이동하기
$ git checkout -

숙박 시설을 이용할 때 체크아웃이라고 하면 그 객실을 나온다는 의미로 이해하고 있을 텐데요.

현재 브랜치를 나와서 <브랜치 이름>으로 들어간다는 의미로 이해하면 되겠습니다.

차라리, checkin이라고 하면 직관적으로 더 잘 이해할 수 있을 거 같습니다. ㅎㅎ

 

다음과 같이 브랜치 이동을 실행해 보겠습니다.

브랜치 이동하기(checkout)
브랜치 이동하기(checkout)

첫 번째는 testbranch1에서 $ git checkout hotfix 를 통해 hotfix로 이동했습니다.

그런 다음, $ git checkout - 라고 했더니, 다시 testbranch1으로 이동했습니다.

리눅스에서 대시(-) 기호는 이전 디렉토리를 의미합니다.

대시(-)를 사용하면 빠르게 이전 브랜치로 이동할 수 있습니다.


브랜치 생성과 동시에 이동하기

앞서 소스트리에서 브랜치를 생성할 때

새 브랜치 체크아웃 옵션
새 브랜치 체크아웃 옵션

이 옵션이 있었습니다.

생성과 함께 만든 브랜치로 이동하는 것이었습니다.

 

소스트리에서 된다는 것은 당연히 터미널에서도

이와 같이 브랜치를 생성하면서 바로 이동할 수 있습니다.

 

checkout 명령어에 -b 옵션을 사용하면 되며, 사용법은 다음과 같습니다.

# 브랜치 생성과 동시에 이동하기
$ git checkout -b <브랜치 이름>

가령, hotfix 라는 브랜치를 만들면서 바로 hotfix로 이동하고 싶다면,

$ git checkout -b hotfix 라고 실행하면 되겠습니다.


브랜치 이동시 유의사항

브랜치를 이동할 때 유의사항이 있습니다. 워킹 디렉터리 및 스테이지를 정리하고 이동해야 합니다.

현재 firstrepo의 Git 영역 구성
현재 firstrepo의 Git 영역 구성

위 그림에서 모든 연결선을 그리진 않았지만,

브랜치들은 워킹 디렉토리와 스테이지 영역, 그리고 저장소를 공유합니다.

다른 것은 브랜치 생성한 커밋 지점부터는 커밋 이력을 독립적으로 가져가게 됩니다.

 

예를 들어 브랜치를 작업자로 생각해 보면,

hotfix가 작업을 하게 되면 워킹 디렉터리에 스테이지에 각종 작업물들을 꺼내 놓습니다.

이런 상황에서는 다른 작업자(브랜치)가 작업을 할 수가 없습니다.

 

그렇기 때문에 브랜치를 이동하기 전에는

워킹 디렉토리 및 스테이지를 정리해야 합니다.

 

이 얘기는 브랜치를 이동하기 전에는 모든 작업을 커밋해야 한다는 것입니다.

커밋하지 않고 브랜치를 변경할 때는 스태시라는 기능을 이용할 수 있습니다.

스태시는 작업물을 잠시 다른 곳에 치워 두는 개념인데,

스태시에 대해서는 뒤에서 학습하도록 하겠습니다.

 

실습을 통해 확인해 보겠습니다.

testbranch1에서 filea.html 파일을 수정해 보겠습니다.

다음은 filea.html 파일을 수정하고 Git 상태를 확인한 결과입니다.

파일을 수정하고 Git 상태 확인
파일을 수정하고 Git 상태 확인

filea.html 파일의 수정한 내용은 마지막 라인에

<h2>브랜치 testbranch1 에서 파일A를 수정합니다.</h2> 를 추가했습니다.

filea.html 파일 수정
filea.html 파일 수정

지금 상태는 filea.html 파일을 수정은 했으나,

스테이지에 올리지도 않았고 커밋도 하지 않은 상태입니다.

 

여기서 hotfix 로 브랜치를 이동해 보겠습니다.

작업중에 브랜치 이동하기
작업중에 브랜치 이동하기

브랜치는 hotfix로 이동했습니다.

그런데, filea.html 이 수정된 상태라고 알려 줍니다.


이동한 브랜치 hotfix에서 Git의 상태를 확인해 봅니다.

Git 상태 확인
Git 상태 확인

filea.html이 수정되었다고 나옵니다.

이렇다는 얘기는 testbranch1에서 작업 중이던 워킹 디렉터리의 내용이

그대로 hotfix 브랜치로 이관된 것으로 이해할 수 있습니다.

 

testbranch1에서 filea.html을 수정한 상태에서 소스트리에서 이동해 보겠습니다.

다음과 같이 현재 브랜치는 testbranch1 이고,

오른쪽에 이력을 보니 “커밋하지 않은 변경사항”이 있음을 알 수 있습니다.

소스트리(Sourcetree)에서 확인
소스트리(Sourcetree)에서 확인

이 상태에서 브랜치 hotfix를 더블클릭해서 이동해 봅니다.

그러면, 다음과 같이 작업용 복사본을 브랜치 ‘hotfix’로 이동하겠냐? 고 물어봅니다.

브랜치 이동시 확인창
브랜치 이동시 확인창

[확인]을 클릭하면 testbranch1 의 변경사항이 그대로 hotfix에 반영이 되겠습니다.

이렇듯 브랜치를 이동할 때는 커밋을 해서 워킹 디렉터리를 정리한 다음 이동해야 합니다.

 

앞서도 얘기했지만, 실무를 하다보면 브렌치에서 작업을 한창 하고 있는데,

갑자기 급하게 다른 수정사항을 확인해야 할 경우에는 커밋하고 브랜치를 이동하기엔 애매한 상황이 올 수 있습니다.

 

이럴 경우 스태시(stash) 기능을 이용할 수 있습니다.

스태시는 다시 학습하도록 하겠습니다.

 

여기까지 브랜치(branch)를 옮겨가며 작업하는 방법을 알아보았습니다.

다음은 브랜치와 커밋의 관계에 대해 알아보겠습니다.

 

감사합니다.

댓글