[Github] Git Branch

Hood·2024년 9월 4일

Github

목록 보기
3/5
post-thumbnail

✍ 간단한 GitHub 사용법

GitHub를 사용하다 보니, 한 번쯤 내용을 정리해두면 좋겠다는 생각이 들어 이 글을 작성하게 되었습니다.
참고로 이 글은 Mac 환경을 기준으로 작성했습니다.


Git Branch

이번 포스트에서는 Branch에 대해 알아보겠습니다.

프로젝트를 하나의 큰 나무라고 생각하면,
여러 갈래로 뻗어나가는 가지가 바로 GitBranch라고 볼 수 있습니다.
브랜치를 활용하면 프로젝트의 소스 코드를 여러 흐름으로 나누어 관리할 수 있고,
새로운 기능을 개발하거나 기존 기능을 수정할 때도 원래 코드를 유지한 채 별도로 작업할 수 있습니다.

즉, 브랜치는 기존 코드를 안정적으로 보존하면서 새로운 작업을 분리해서 진행할 수 있게 해주는 기능이라고 이해하시면 됩니다.


Git Flow 전략

출처: https://leetrue.hashnode.dev/branch-merge-strategy

브랜치 전략에는 여러 가지가 있지만,
이번 글에서는 많이 알려진 전략 중 하나인 Git Flow를 기준으로 설명해보겠습니다.

위 그림을 보면 main, release, hotfix, develop, feature
여러 종류의 브랜치가 나뉘어 있는 것을 볼 수 있습니다.

각 브랜치는 역할이 다르기 때문에,
여러 사람이 함께 작업할 때 기능별로 병렬 작업을 진행하기에 좋습니다.
즉, 브랜치 전략을 잘 활용하면 협업 과정에서 역할을 나누고 변경 사항을 관리하기가 훨씬 수월해집니다.

그렇다면 각 브랜치가 어떤 역할을 하는지 하나씩 살펴보겠습니다.


Main branch

main 브랜치는 쉽게 말해 배포 가능한 안정적인 코드만 모아두는 브랜치라고 생각하시면 됩니다.
실제 서비스에 반영할 수 있는 상태의 코드가 있어야 하며,
보통 버전 태그를 함께 관리하기도 합니다.

  • 즉, 출시 가능한 프로덕션 코드를 모아두는 메인 브랜치입니다.

Develop branch

develop 브랜치는 다음 버전을 개발하기 위한 코드를 모아두는 브랜치입니다.
여러 기능 브랜치에서 작업한 내용을 모아 통합하고 테스트하는 중심 브랜치라고 볼 수 있습니다.

  • 다음 버전 개발을 위한 코드를 모아두는 브랜치입니다.

Feature branch

feature 브랜치는 하나의 기능을 개발하기 위해 사용하는 브랜치입니다.
보통 develop 브랜치에서 분기하여 만들고,
기능 개발이 끝나면 다시 develop 브랜치로 merge합니다.

브랜치 이름은 보통 아래처럼 짓습니다.

feature/기능명
  • 하나의 기능 개발을 위한 브랜치입니다.

Release branch

release 브랜치는 배포를 준비하기 위한 브랜치입니다.
보통 develop 브랜치에서 분기하여 만들고,
버전 정보 수정이나 배포 전 최종 점검, 간단한 버그 수정 등에 사용합니다.

배포 준비가 끝나면 maindevelop에 모두 반영합니다.

  • 소프트웨어 배포를 준비하기 위한 브랜치입니다.

Hotfix branch

hotfix 브랜치는 이미 배포된 서비스에서 긴급하게 수정이 필요할 때 사용하는 브랜치입니다.
보통 main 브랜치에서 분기하여 만들고,
수정이 끝나면 다시 maindevelop에 반영합니다.

  • 이미 배포된 버전에 문제가 발생했을 때 사용하는 브랜치입니다.

Merge

그렇다면 이제 Merge에 대해서도 궁금해질 수 있습니다.

브랜치를 나누어 작업하다 보면,
기능 개발이 끝난 뒤 해당 내용을 다른 브랜치에 반영해야 하는 상황이 생깁니다.
이때 사용하는 작업이 merge입니다.

즉, merge한 브랜치의 변경 사항을 다른 브랜치에 합치는 작업입니다.
이 과정에서 같은 파일의 같은 부분을 서로 다르게 수정했다면 충돌(conflict) 이 발생할 수 있으므로 주의가 필요합니다.


Git 명령어

이제 브랜치를 다룰 때 자주 사용하는 명령어를 정리해보겠습니다.

현재 브랜치 목록 확인하기

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 [브랜치 이름]

pull이란?

협업 중이라고 가정해보겠습니다.
팀원이 같은 브랜치에 새로운 작업 내용을 올렸다면,
내 로컬 저장소에도 그 변경 내용을 반영해야 합니다.

이럴 때 사용하는 명령어가 git pull입니다.
원격 저장소의 최신 변경 사항을 가져오고, 현재 브랜치에 반영합니다.

즉, pull은 단순히 “가져오는 것”이 아니라
보통 가져오기(fetch) + 병합(merge) 까지 함께 수행하는 명령어라고 이해하시면 됩니다.


tip. 브랜치 작업 흐름 보기

내가 어떤 브랜치를 만들고, 어떤 커밋을 남기고, 어떻게 병합했는지 흐름을 보고 싶다면 아래 명령어를 사용할 수 있습니다.

git log --pretty=format:"%h = %an , %ar : %s" --graph

이 명령어를 실행하면 브랜치가 생성되고 병합된 흐름과 함께
각 커밋의 기록을 그래프 형태로 볼 수 있습니다.


tip. 마지막 커밋 되돌리기

내가 방금 한 커밋을 되돌리고 싶다면 아래 명령어를 사용할 수 있습니다.

git reset --soft HEAD^

이 명령어는 가장 최근 커밋만 취소하고,
변경한 파일 내용은 그대로 남겨둔 채 다시 커밋할 수 있게 해줍니다.

즉, 커밋만 되돌리고 작업 내용은 유지하고 싶을 때 유용합니다.


📌 정리

이번 글에서는 branch의 개념과 함께
Git Flow 전략, 그리고 자주 사용하는 브랜치 관련 명령어들을 정리해보았습니다.

브랜치를 잘 활용하면
기존 코드를 안정적으로 유지하면서도 새로운 기능을 안전하게 개발할 수 있고,
여러 명이 함께 작업할 때도 역할을 나누어 효율적으로 협업할 수 있습니다.

저는 주로 Git Flow 전략을 사용해봤기 때문에 이번 글에서는 이 방식을 중심으로 정리했습니다.
다음 글에서는 다른 브랜치 전략이나,
merge 충돌이 발생했을 때 어떻게 해결하면 좋은지도 함께 정리해보면 좋을 것 같습니다.

프로젝트를 안정적으로 운영하기 위해서는
브랜치의 개념과 흐름을 꼭 익혀두는 것이 중요하다고 생각합니다. 👊

profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글