| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- restful api
- 조건문
- react
- javascript
- 반복문
- AWS
- 상속
- 코틀린
- 개발이취미인사람
- component
- Producer
- spring boot
- Nest.js
- java
- 개발이 취미인 사람
- 개발자
- props
- state
- kafka
- Kotlin
- It
- swagger
- front-end
- Sequelize
- vue
- back-end
- SWIFT
- jpa
- node.js
- file upload
- Today
- Total
개발이 취미인 사람
[Git] - 브랜치(Branch) 개념과 생성/삭제 본문
개요
안녕하세요. 이번 시간에는 Git 브랜치(Branch)의 개념과 생성/삭제 방법에 대해 알아보겠습니다. 브랜치는 Git의 가장 강력한 기능 중 하나로, 독립적인 작업 공간을 만들어 여러 기능을 동시에 개발할 수 있게 해줍니다. 혹시 이전 시간에 내용을 학습하고 오시지 못 하신 분들은 학습하고 오시는 걸 추천드리겠습니다.
- 브랜치란?
브랜치(Branch)는 독립적인 작업 공간을 의미합니다. 나뭇가지(branch)처럼 하나의 줄기에서 여러 갈래로 뻗어나가는 것을 상상하면 됩니다.
브랜치가 필요한 이유
브랜치 없이 개발한다고 가정해봅시다.
상황: 3명의 개발자가 하나의 프로젝트를 개발
개발자 A: 로그인 기능 개발 중
개발자 B: 회원가입 기능 개발 중
개발자 C: 긴급 버그 수정 필요!
문제점:
- A와 B의 미완성 코드가 섞임
- C가 버그를 수정하려면 A, B의 작업을 기다려야 함
- 코드 충돌 발생 가능성 높음
브랜치를 사용하면 이런 문제를 해결할 수 있습니다.
main 브랜치 ─────────────────────────────>
│
├── feature/login (개발자 A)
│
├── feature/signup (개발자 B)
│
└── hotfix/bug-fix (개발자 C)
각자 독립적인 공간에서 작업 후 완료되면 병합!
브랜치의 장점
장점 설명
| 독립적 개발 | 다른 작업에 영향 없이 새 기능 개발 |
| 안전한 실험 | 실패해도 메인 코드에 영향 없음 |
| 병렬 작업 | 여러 기능을 동시에 개발 가능 |
| 버전 관리 | 릴리즈, 핫픽스 등 버전별 관리 용이 |
- 브랜치 기본 개념
HEAD란?
HEAD는 현재 작업 중인 브랜치를 가리키는 포인터입니다.
# HEAD 확인
cat .git/HEAD
# 출력 예시
ref: refs/heads/main
브랜치의 실체
브랜치는 사실 특정 커밋을 가리키는 포인터입니다. 새 커밋을 하면 브랜치 포인터가 최신 커밋으로 이동합니다.
커밋 히스토리:
A --- B --- C --- D (main, HEAD)
↑
현재 위치
새 브랜치를 만들면:
A --- B --- C --- D (main)
↑
└── (feature, HEAD)
- 브랜치 조회
로컬 브랜치 목록
# 브랜치 목록 확인
git branch
# 출력 예시
* main
feature/login
feature/signup
* 표시는 현재 체크아웃된 브랜치를 나타냅니다.
원격 브랜치 포함 조회
# 원격 브랜치 포함
git branch -a
# 출력 예시
* main
feature/login
remotes/origin/main
remotes/origin/feature/login
브랜치 상세 정보
# 마지막 커밋 정보와 함께 조회
git branch -v
# 출력 예시
* main a1b2c3d feat: 메인 기능 추가
feature/login b2c3d4e feat: 로그인 구현 중
- 브랜치 생성
기본 생성
# 브랜치 생성 (현재 브랜치에서 이동하지 않음)
git branch 브랜치명
# 예시
git branch feature/login
생성과 동시에 이동
# 브랜치 생성 + 체크아웃 (이동)
git checkout -b 브랜치명
# 예시
git checkout -b feature/login
# Git 2.23 이후 권장 방식
git switch -c 브랜치명
# 예시
git switch -c feature/login
특정 커밋에서 브랜치 생성
# 특정 커밋에서 브랜치 생성
git branch 브랜치명 커밋해시
# 예시
git branch hotfix/bug-fix a1b2c3d
# 생성과 동시에 이동
git checkout -b hotfix/bug-fix a1b2c3d
원격 브랜치 기반으로 생성
# 원격 브랜치를 추적하는 로컬 브랜치 생성
git checkout -b feature/login origin/feature/login
# 또는 간단하게
git checkout --track origin/feature/login
# Git 2.23 이후
git switch -c feature/login origin/feature/login
- 브랜치 이동 (체크아웃)
checkout vs switch
Git 2.23 버전부터 checkout 명령어가 switch와 restore로 분리되었습니다.
# 기존 방식 (checkout)
git checkout 브랜치명
# 새로운 방식 (switch) - 권장
git switch 브랜치명
브랜치 이동
# main 브랜치로 이동
git switch main
# feature/login 브랜치로 이동
git switch feature/login
# 이전 브랜치로 이동
git switch -
이동 시 주의사항
브랜치를 이동하기 전에 현재 작업 내용을 커밋하거나 스태시해야 합니다.
# 커밋하지 않은 변경사항이 있으면 오류 발생
git switch main
# error: Your local changes to the following files would be overwritten
# 해결 방법 1: 커밋
git add .
git commit -m "작업 중 임시 커밋"
git switch main
# 해결 방법 2: 스태시 (나중에 다룰 예정)
git stash
git switch main
- 브랜치 삭제
로컬 브랜치 삭제
# 병합된 브랜치 삭제
git branch -d 브랜치명
# 예시
git branch -d feature/login
# 출력
Deleted branch feature/login (was b2c3d4e).
강제 삭제
병합되지 않은 브랜치를 삭제하려면 -D 옵션을 사용합니다.
# 강제 삭제 (병합 여부 무시)
git branch -D 브랜치명
# 예시
git branch -D feature/experiment
⚠️ 주의: -D 옵션은 병합되지 않은 커밋도 함께 삭제되므로 주의해서 사용하세요!
원격 브랜치 삭제
# 원격 브랜치 삭제
git push origin --delete 브랜치명
# 예시
git push origin --delete feature/login
# 또는
git push origin :feature/login
삭제할 수 없는 경우
현재 체크아웃된 브랜치는 삭제할 수 없습니다.
# 현재 feature/login 브랜치에 있는 상태
git branch -d feature/login
# error: Cannot delete branch 'feature/login' checked out
# 해결: 다른 브랜치로 이동 후 삭제
git switch main
git branch -d feature/login
- 브랜치 이름 규칙
일반적인 명명 규칙
# 기능 개발
feature/기능명
feature/login
feature/user-profile
# 버그 수정
bugfix/버그설명
bugfix/login-error
bugfix/null-pointer
# 긴급 수정
hotfix/수정내용
hotfix/security-patch
# 릴리즈
release/버전
release/1.0.0
release/2024.01
# 개선/리팩토링
improve/개선내용
refactor/리팩토링내용
명명 규칙 예시
타입 패턴 예시
| 기능 | feature/* | feature/social-login |
| 버그 | bugfix/* | bugfix/password-reset |
| 긴급 | hotfix/* | hotfix/xss-vulnerability |
| 릴리즈 | release/* | release/v2.1.0 |
| 실험 | experiment/* | experiment/new-algorithm |
브랜치 이름 규칙
# 좋은 예시
feature/user-authentication
bugfix/fix-login-redirect
hotfix/security-update
# 나쁜 예시
Feature/Login # 대문자 사용
feature/login page # 공백 사용
feature/로그인 # 한글 사용 (가능하지만 비권장)
- 브랜치 실습
전체 흐름을 실습해보겠습니다.
# 1. 프로젝트 생성 및 초기화
mkdir branch-practice
cd branch-practice
git init
# 2. 첫 번째 커밋
echo "# Branch Practice" > README.md
git add .
git commit -m "init: 프로젝트 시작"
# 3. 브랜치 목록 확인
git branch
# * main
# 4. feature/login 브랜치 생성 및 이동
git switch -c feature/login
# 5. 브랜치 확인
git branch
# main
# * feature/login
# 6. 로그인 기능 개발 (시뮬레이션)
echo "function login() {}" > login.js
git add .
git commit -m "feat: 로그인 함수 추가"
echo "function validateUser() {}" >> login.js
git add .
git commit -m "feat: 사용자 검증 함수 추가"
# 7. 커밋 로그 확인
git log --oneline
# b2c3d4e feat: 사용자 검증 함수 추가
# a1b2c3d feat: 로그인 함수 추가
# 9z8y7x6 init: 프로젝트 시작
# 8. main 브랜치로 이동
git switch main
# 9. main에서는 login.js가 없음 확인
ls
# README.md
# 10. feature/signup 브랜치 생성
git switch -c feature/signup
# 11. 회원가입 기능 개발
echo "function signup() {}" > signup.js
git add .
git commit -m "feat: 회원가입 함수 추가"
# 12. 전체 브랜치 확인
git branch
# feature/login
# * feature/signup
# main
# 13. 브랜치별 커밋 확인
git log --oneline --all --graph
# * c3d4e5f (feature/signup) feat: 회원가입 함수 추가
# | * b2c3d4e (feature/login) feat: 사용자 검증 함수 추가
# | * a1b2c3d feat: 로그인 함수 추가
# |/
# * 9z8y7x6 (main) init: 프로젝트 시작
# 14. 실험 브랜치 생성 후 삭제
git switch main
git switch -c experiment/test
echo "test" > test.txt
git add .
git commit -m "test: 실험"
# 실험 실패로 가정, 삭제
git switch main
git branch -D experiment/test
# Deleted branch experiment/test (was d4e5f6g).
- 유용한 브랜치 명령어 정리
# 브랜치 목록
git branch # 로컬 브랜치
git branch -r # 원격 브랜치
git branch -a # 전체 브랜치
git branch -v # 상세 정보
# 브랜치 생성
git branch 브랜치명 # 생성만
git switch -c 브랜치명 # 생성 + 이동
git checkout -b 브랜치명 # 생성 + 이동 (구버전)
# 브랜치 이동
git switch 브랜치명 # 이동
git switch - # 이전 브랜치로
# 브랜치 삭제
git branch -d 브랜치명 # 삭제 (병합된 것만)
git branch -D 브랜치명 # 강제 삭제
git push origin --delete 브랜치명 # 원격 삭제
# 브랜치 이름 변경
git branch -m 새이름 # 현재 브랜치 이름 변경
git branch -m 기존이름 새이름 # 특정 브랜치 이름 변경
마무리
이번 시간에는 Git 브랜치의 개념과 생성/삭제 방법에 대해 알아봤습니다. 브랜치는 Git의 핵심 기능으로, 효율적인 협업과 안전한 개발을 가능하게 합니다. 브랜치를 자유롭게 만들고 삭제하는 연습을 충분히 하시길 추천드립니다.
다음 시간에는 브랜치 병합(Merge) 방법에 대해 알아보겠습니다.
참고 자료
'컴퓨터공학 > Git' 카테고리의 다른 글
| [Git] - Rebase vs Merge 차이점 (0) | 2025.12.21 |
|---|---|
| [Git] - 브랜치 병합(Merge) 방법 (0) | 2025.12.20 |
| [Git] - .gitignore 설정 방법 (0) | 2025.12.18 |
| [Git] - Git 기본 명령어 (init, add, commit, status, log) (1) | 2025.12.16 |
| [Git] - Git 설치 및 초기 설정 방법 (0) | 2025.12.16 |