GitHub를 사용하다 보니, 한 번쯤 내용을 정리해두면 좋겠다는 생각이 들어 이 글을 작성하게 되었습니다.
참고로 이 글은 Mac 환경을 기준으로 작성했습니다.
이번 포스트에서는 Branch에 대해 알아보겠습니다.
프로젝트를 하나의 큰 나무라고 생각하면,
여러 갈래로 뻗어나가는 가지가 바로 Git의 Branch라고 볼 수 있습니다.
브랜치를 활용하면 프로젝트의 소스 코드를 여러 흐름으로 나누어 관리할 수 있고,
새로운 기능을 개발하거나 기존 기능을 수정할 때도 원래 코드를 유지한 채 별도로 작업할 수 있습니다.
즉, 브랜치는 기존 코드를 안정적으로 보존하면서 새로운 작업을 분리해서 진행할 수 있게 해주는 기능이라고 이해하시면 됩니다.

브랜치 전략에는 여러 가지가 있지만,
이번 글에서는 많이 알려진 전략 중 하나인 Git Flow를 기준으로 설명해보겠습니다.
위 그림을 보면 main, release, hotfix, develop, feature 등
여러 종류의 브랜치가 나뉘어 있는 것을 볼 수 있습니다.
각 브랜치는 역할이 다르기 때문에,
여러 사람이 함께 작업할 때 기능별로 병렬 작업을 진행하기에 좋습니다.
즉, 브랜치 전략을 잘 활용하면 협업 과정에서 역할을 나누고 변경 사항을 관리하기가 훨씬 수월해집니다.
그렇다면 각 브랜치가 어떤 역할을 하는지 하나씩 살펴보겠습니다.
main 브랜치는 쉽게 말해 배포 가능한 안정적인 코드만 모아두는 브랜치라고 생각하시면 됩니다.
실제 서비스에 반영할 수 있는 상태의 코드가 있어야 하며,
보통 버전 태그를 함께 관리하기도 합니다.
develop 브랜치는 다음 버전을 개발하기 위한 코드를 모아두는 브랜치입니다.
여러 기능 브랜치에서 작업한 내용을 모아 통합하고 테스트하는 중심 브랜치라고 볼 수 있습니다.
feature 브랜치는 하나의 기능을 개발하기 위해 사용하는 브랜치입니다.
보통 develop 브랜치에서 분기하여 만들고,
기능 개발이 끝나면 다시 develop 브랜치로 merge합니다.
브랜치 이름은 보통 아래처럼 짓습니다.
feature/기능명
release 브랜치는 배포를 준비하기 위한 브랜치입니다.
보통 develop 브랜치에서 분기하여 만들고,
버전 정보 수정이나 배포 전 최종 점검, 간단한 버그 수정 등에 사용합니다.
배포 준비가 끝나면 main과 develop에 모두 반영합니다.
hotfix 브랜치는 이미 배포된 서비스에서 긴급하게 수정이 필요할 때 사용하는 브랜치입니다.
보통 main 브랜치에서 분기하여 만들고,
수정이 끝나면 다시 main과 develop에 반영합니다.
그렇다면 이제 Merge에 대해서도 궁금해질 수 있습니다.
브랜치를 나누어 작업하다 보면,
기능 개발이 끝난 뒤 해당 내용을 다른 브랜치에 반영해야 하는 상황이 생깁니다.
이때 사용하는 작업이 merge입니다.
즉, merge는 한 브랜치의 변경 사항을 다른 브랜치에 합치는 작업입니다.
이 과정에서 같은 파일의 같은 부분을 서로 다르게 수정했다면 충돌(conflict) 이 발생할 수 있으므로 주의가 필요합니다.
이제 브랜치를 다룰 때 자주 사용하는 명령어를 정리해보겠습니다.
git branch
현재 프로젝트에 어떤 브랜치가 있는지 확인할 수 있으며,
현재 내가 위치한 브랜치에는 * 표시가 붙습니다.

git checkout -b [생성할 브랜치 이름]
새 브랜치를 만들고, 그 브랜치로 바로 이동하는 명령어입니다.
git checkout [이동할 브랜치 이름]
다른 브랜치로 이동할 때 사용하는 명령어입니다.

위 사진처럼 현재 브랜치가 main이었더라도,
checkout 명령어를 사용하면 develop 브랜치로 이동할 수 있습니다.
참고로 최근에는
git switch명령어도 많이 사용하지만,
git checkout역시 여전히 자주 쓰이는 명령어입니다.
git checkout -
방금 전에 작업하던 브랜치로 다시 돌아갈 때 사용할 수 있습니다.
git merge [병합할 브랜치 이름]
현재 내가 위치한 브랜치에 다른 브랜치의 변경 사항을 합칠 때 사용하는 명령어입니다.
예를 들어 develop 브랜치에서 feature/login 브랜치를 합치고 싶다면,
먼저 develop으로 이동한 뒤 아래처럼 실행합니다.
git merge feature/login
git log --oneline
브랜치의 변경 이력을 간단하게 한 줄씩 확인할 수 있는 명령어입니다.

git pull
또는 상황에 따라 아래처럼 사용할 수도 있습니다.
git pull origin [브랜치 이름]
협업 중이라고 가정해보겠습니다.
팀원이 같은 브랜치에 새로운 작업 내용을 올렸다면,
내 로컬 저장소에도 그 변경 내용을 반영해야 합니다.
이럴 때 사용하는 명령어가 git pull입니다.
원격 저장소의 최신 변경 사항을 가져오고, 현재 브랜치에 반영합니다.
즉, pull은 단순히 “가져오는 것”이 아니라
보통 가져오기(fetch) + 병합(merge) 까지 함께 수행하는 명령어라고 이해하시면 됩니다.
내가 어떤 브랜치를 만들고, 어떤 커밋을 남기고, 어떻게 병합했는지 흐름을 보고 싶다면 아래 명령어를 사용할 수 있습니다.
git log --pretty=format:"%h = %an , %ar : %s" --graph
이 명령어를 실행하면 브랜치가 생성되고 병합된 흐름과 함께
각 커밋의 기록을 그래프 형태로 볼 수 있습니다.

내가 방금 한 커밋을 되돌리고 싶다면 아래 명령어를 사용할 수 있습니다.
git reset --soft HEAD^
이 명령어는 가장 최근 커밋만 취소하고,
변경한 파일 내용은 그대로 남겨둔 채 다시 커밋할 수 있게 해줍니다.
즉, 커밋만 되돌리고 작업 내용은 유지하고 싶을 때 유용합니다.
이번 글에서는 branch의 개념과 함께
Git Flow 전략, 그리고 자주 사용하는 브랜치 관련 명령어들을 정리해보았습니다.
브랜치를 잘 활용하면
기존 코드를 안정적으로 유지하면서도 새로운 기능을 안전하게 개발할 수 있고,
여러 명이 함께 작업할 때도 역할을 나누어 효율적으로 협업할 수 있습니다.
저는 주로 Git Flow 전략을 사용해봤기 때문에 이번 글에서는 이 방식을 중심으로 정리했습니다.
다음 글에서는 다른 브랜치 전략이나,
merge 충돌이 발생했을 때 어떻게 해결하면 좋은지도 함께 정리해보면 좋을 것 같습니다.
프로젝트를 안정적으로 운영하기 위해서는
브랜치의 개념과 흐름을 꼭 익혀두는 것이 중요하다고 생각합니다. 👊