깃허브 이용하기 - 브랜치(branch)와 태그(tag)

urur-27·2025년 2월 16일

깃허브

목록 보기
3/5

Git Branch와 Tag

Git을 사용하면 브랜치(Branch)와 태그(Tag) 를 활용하여 효과적으로 버전 관리를 할 수 있음.
브랜치와 태그의 개념과 활용법을 정리


1. Git Branch란? (브랜치)

브랜치(Branch)란?

Git의 브랜치는 코드를 독립적으로 수정할 수 있는 가지(Branch) 를 의미.
각 브랜치는 서로 영향을 주지 않으면서도, 필요할 때 병합(Merge)할 수 있음.
브랜치는 "어디서부터 새 작업을 시작할 것인가"를 가리키는 포인터에 가까움.
브랜치마다 서로 다른 커밋 이력을 가질 수 있으므로, 여러 기능을 병렬로 개발할 수 있음

브랜치 개념도

A → B → C → F    (main 브랜치)
         \
          D → E  (feature/login 브랜치)
  1. A, B, C 커밋 (main 브랜치)
    • 메인 브랜치에서 일정 기간 동안 기능 개발과 버그 수정이 이루어져 A, B, C 커밋이 쌓인다.
    • C 커밋 시점에서 새로운 기능(로그인 기능)을 추가하기로 결정했다.
  2. 분기(Branch) 생성
    • feature/login이라는 브랜치를 C 커밋 기준으로 분기한다.
    • 이렇게 생성된 새 브랜치에서는 D, E 커밋을 통해 로그인 기능을 독립적으로 개발할 수 있다.
  3. 브랜치의 격리 효과
    • 로그인 기능이 완성될 때까지, 메인 브랜치와 충돌 없이 자유롭게 수정·테스트 가능하다.
    • 다른 팀원이 동시에 메인 브랜치에서 다른 작업(F 커밋)을 진행해도 상호 간섭이 일어나지 않는다.
  4. 브랜치 병합 (향후)
    • 기능 개발이 완료되고 충분히 안정화되면, feature/login 브랜치를 다시 메인 브랜치로 병합(merge)해 전체 코드베이스에 반영한다.
    • 이후 필요 없다면 feature/login 브랜치는 삭제해 작업 흐름을 정리할 수 있다.

브랜치를 사용하는 이유

  • 메인(main) 브랜치를 보호하면서 새로운 기능을 개발할 수 있음.
  • 여러 개발자가 동시에 작업하기 편리함.
  • 버그 수정이나 실험적인 코드를 안정적으로 테스트 가능.

2. Git 브랜치 기본 명령어

현재 브랜치 확인

git branch
  • 현재 브랜치를 확인할 수 있음.

새로운 브랜치 생성

git branch 새로운-브랜치명
  • 새로운 브랜치를 만들지만, 현재 작업 중인 브랜치는 변경되지 않음.

브랜치 변경 (체크아웃)

git checkout 새로운-브랜치명
  • 생성한 브랜치로 이동.

브랜치 생성 후 바로 이동

git checkout -b 새로운-브랜치명
  • 새로운 브랜치를 만들고 즉시 이동.

브랜치 목록 + 현재 브랜치 표시

git branch --list
  • 현재 존재하는 브랜치를 목록으로 보여줌.
  • * 기호가 현재 위치한 브랜치를 나타냄.

브랜치 삭제

git branch -d 삭제할-브랜치명
  • 병합(Merge)된 브랜치는 -d 옵션으로 삭제 가능.
  • 병합되지 않은 브랜치는 -D 옵션을 사용해야 강제 삭제됨.
git branch -D 삭제할-브랜치명

3. Git 브랜치 병합 (Merge)

브랜치 병합 (Merge)

git checkout main  # 메인 브랜치로 이동
git merge 기능-브랜치명  # 기능 브랜치를 메인 브랜치에 병합
  • fast-forward 방식으로 변경 사항이 병합됨.

충돌 해결 후 병합

git merge 기능-브랜치명
# 충돌 발생 시 파일을 수정한 후
git add .
git commit -m "Merge conflict resolved"
  • 병합 충돌이 발생하면 직접 파일을 수정한 후 다시 커밋하면 됨.

4. Git 태그(Tag)란?

태그(Tag)란?

Git 태그는 특정 커밋을 쉽게 식별할 수 있도록 이름을 붙이는 기능.
주로 버전 관리(v1.0, v2.0) 용도로 사용해.

태그 개념도

      (v1.0) - tag
        ↓
A → B → C → F    (main 브랜치)
         \
          X → Y  (bugfix/hotfix 브랜치)
              ↑
        (hotfix_v1.0.1) - tag
  1. A, B, C 커밋 (main 브랜치)
    • A → B → C 순으로 주요 기능을 개발한다.
    • C 커밋이 충분히 안정적이라고 판단되어, v1.0 태그를 붙이고 배포를 진행한다.
  2. 긴급 버그 발견
    • 배포 후 긴급 버그가 발견되었다고 가정한다.
    • 이 버그를 빠르게 수정하기 위해, C (v1.0) 커밋 지점에서 bugfix/hotfix 브랜치를 만든다.
  3. X, Y 커밋 (bugfix/hotfix 브랜치)
    • 브랜치를 분기한 뒤, 버그 수정 작업을 진행하면서 X, Y 커밋을 만든다.
    • 모든 수정이 완료된 시점(커밋 Y)에서 새 태그 hotfix_v1.0.1을 붙여 핫픽스 버전을 배포한다.
  4. 태그를 활용한 버전 식별
    • v1.0 태그: 메인 브랜치에서 정식 배포했던 버전
    • hotfix_v1.0.1 태그: 긴급 수정 버전
    • 각 태그를 통해 “어떤 커밋을 기준으로, 어떤 변경이 들어가서 배포되었는지”를 명확히 확인할 수 있다.

주요 포인트

  • 메인 브랜치의 태그(예: v1.0): 새 기능이 정상 동작하여 배포 가능한 시점에 붙이는 ‘공식 버전’

  • 핫픽스 브랜치의 태그(예: hotfix_v1.0.1): 기존 배포 버전에서 발견된 문제를 긴급하게 수정한 버전을 명시

  • 실무 활용:

    • 긴급 버그 발생 시, 마지막 안정 버전에 태그가 달려 있으므로 해당 커밋을 정확히 찾아 브랜치로 분기
    • 버그 수정이 완료되면 또 다른 태그를 붙여 새 버전을 빠르게 배포
    • 이후 필요하다면 bugfix/hotfix 브랜치를 main에 병합해 코드를 동기화

    태그를 사용하는 이유

  • 특정 버전(릴리즈 버전)을 쉽게 관리할 수 있음.

  • 배포된 코드의 상태를 추적하기 편리함.

  • 태그를 이용해 과거 버전으로 쉽게 돌아갈 수 있음.


5. Git 태그 기본 명령어

태그 목록 확인

git tag
  • 현재 저장소에 존재하는 태그 리스트를 확인할 수 있음.

태그 생성

git tag 태그명
  • 현재 커밋에 태그를 생성함.

특정 커밋에 태그 추가

git tag 태그명 커밋해시
  • 특정 커밋 해시를 사용하여 해당 커밋에 태그를 추가할 수 있음.

태그 삭제

git tag -d 태그명
  • 로컬에서 태그 삭제.
git push origin --delete 태그명
  • 원격 저장소에서도 태그 삭제.

6. Git 태그 푸시 및 체크아웃

태그를 원격 저장소로 푸시

git push origin 태그명
  • 특정 태그를 원격 저장소(GitHub 등)로 푸시.
git push origin --tags
  • 모든 태그를 한 번에 원격 저장소로 푸시.

태그를 기준으로 체크아웃

git checkout 태그명
  • 태그가 달린 커밋으로 이동하여 특정 버전을 확인할 수 있음.

정리: Branch vs Tag 비교

기능Branch(브랜치)Tag(태그)
개념독립적인 작업 공간특정 커밋을 표시하는 이름
주 목적새로운 기능 개발 & 버그 수정버전 관리 (v1.0, v2.0)
삭제 가능 여부가능 (git branch -d)가능 (git tag -d)
이동 가능 여부가능 (git checkout 브랜치명)가능 (git checkout 태그명)
원격 저장소 푸시git push origin 브랜치명git push origin 태그명
  • 브랜치는 새로운 기능 개발 & 병합을 위한 독립적인 작업 공간
  • 태그는 특정 커밋(버전)을 식별하고 관리하는 기능
profile
끄아악

0개의 댓글