“Git branch”는 Git에서 프로젝트를 효율적으로 관리하기 위한 핵심 개념입니다. 이 작업 공간은 개발 저장소를 어지럽히지 않고 병렬적으로 개발을 수행할 수 있도록 도와줍니다.
브랜치가 정확히 무엇이며, 어떻게 생성하고 전환하는지 정리해보았습니다.
Git branch 란?
Git branch는 Git의 가장 기본적인 작업 공간 단위입니다.
프로젝트를 여러 개발자가 동시에 작업할 수 있도록 해주는 것이 목적입니다.
각 브랜치는 독립적으로 변경 사항을 추적하며, 다른 브랜치에 영향을 주지 않습니다.
아래 그림을 보면 각 기능 단위로 브랜치를 나누어 독립적으로 작업을 진행하는 것을 확인할 수 있습니다.
Git branch : 브랜치 생성하기
git branch
명령어를 사용하여 브랜치를 생성합니다.
예를 들어, “feature/login” 브랜치를 생성하려면 다음과 같이 입력합니다.
(git branch 생성시 유의점은 inital commit을 시작 한 상태에서 branch 생성을 들어가야 한다는 점 입니다. 아무런 commit이 없다면 branch는 제대로 생성되지 않습니다.)
git branch feature/login
실제로 브랜치가 생성됐는지 확인하기 위해선 git branch 라는 명령어만 입력해보세요.
git branch
하지만 생성만으로는 해당 브랜치로 자동 이동 되지는 않습니다.
Git switch / Git checkout : 브랜치 전환하기
브랜치를 전환하기 위해 git switch
또는 git checkout
명령어를 사용합니다.
예를 들어 feature/login 브랜치로 이동하고 싶다면 아래와 같은 명령어를 사용합니다.
git switch <브랜치명>
ex) git switch feature/login
혹은
git checkout <브랜치명>
ex) git checkout feature/login
왜 git switch
와 git checkout
이 비슷한가?
git switch
는 브랜치 조작만을 위한 명령어입니다.git checkout
은 브랜치 조작 뿐만 아니라 다른 기능들도 포함합니다.- 브랜치 조작을 위해서는
git switch
를 사용하는 것이 권장됩니다.
브랜치 생성과 전환 동시에
git checkout -b
명령어를 사용하면 브랜치를 생성하고 동시에 전환할 수 있습니다.
예를 들어, “feature/call” 브랜치를 생성하고 전환하려면 다음 명령어를 사용합니다:
# -c 는 create의 약자입니다.
git switch -c feature/login
# -b는 branch의 약자입니다.
git checkout -b feature/login
Git stash : 브랜치에서 코드 변경사항 임시 저장하기
코드 변경 후 git add
및 git commit
으로 저장하지 않으면, git switch
명령어가 동작하지 않을 때가 있습니다.
(정확히는 항상 그런 것은 아니고, 이동하는 브랜치의 코드와 내가 변경한 코드에서 겹치는 부분이 있을 때 이동이 안됩니다!)
이런 경우, 빠르게 add
및 commit
후 넘어가도 되지만 작업 도중, 급하게 switch
를 해야 할 때는 stash
로 코드를 임시 저장 후 switch
를 할 수도 있습니다.
git stash save : Stash 저장하기
“git stash
“는 작업 중인 코드 변경사항을 임시로 저장하는 데 사용됩니다. 이는 갑작스러운 브랜치 전환이나 급한 버그 픽스에 대처할 때 매우 편리합니다.
git stash save "임시 메시지"
git stash save "메시지"
가 아닌 git stash
만 입력해서 메시지 없이 저장할 수도 있습니다.
git stash list : Stash 목록 관리하기
여러 작업을 하면서 “git stash”를 여러 번 사용할 수 있습니다.
이 때 목록을 확인하고 필요한 stash를 적절히 적용하거나 제거할 수 있습니다.
git stash list
git stash apply : Stash 불러오기
“git stash apply
” 명령어는 가장 최근에 생성한 stash를 현재 작업 중인 브랜치에 적용합니다.
stash를 적용하면 변경사항이 적용되지만, stash는 삭제되지 않습니다. 따라서 여러 번 적용할 수 있습니다.
# 최근에 저장한 stash를 현재 브랜치에 적용
git stash apply
# 특정 stash를 적용
git stash apply stash@{0}
git stash drop : Stash 삭제하기
“git stash drop
” 명령어는 특정 stash를 삭제합니다. 즉, 해당 stash
를 더 이상 사용하지 않을 때 삭제할 때 사용됩니다.
stash
를 삭제하면 해당 stash
에서 저장한 변경사항이 완전히 삭제됩니다.
# 최근에 저장한 stash를 삭제
git stash drop
# 특정 stash를 삭제
git stash drop stash@{1}
stash
삭제하지 않는 경우, 어떤 일이 발생하는지 아래의 경우가 발생하는 것을 확인 할 수 있습니다.
commit
이전 상황이 아래와 같다고 가정 합니다.
main branch에서의 업무를 급하게 해결하기 위해 현재 브랜지 변경 사항을 stash save
해줍니다.
메인에서 업무가 완료가 feature/login 브랜치에서도 추가 기능이 구현되어서 commit
이 완료되었습니다.
이 경우 위에서 보다 싶이 임시 저장 된 stash
가 지워지지 않고 그대로 있어서 commit history가 복잡해 질 수 있음
이때 git stash drop
을 사용합니다.
git history가 깔끔해진 것을 확인 할 수 있습니다.