Git 기초편 2편 — 브랜치, 어렵지 않아요

2026. 5. 9. 15:54·블로그, 컴퓨터/DevOps

git 연재글 썸네일

"Git을 공부하면서 쓰는 시리즈" 2편입니다.
1편: git init과 첫 커밋까지를 먼저 읽으시면 흐름이 이어집니다.


시작하면서

1편에서 커밋을 두 개 만들었습니다.

a9b3c12 README에 프로젝트 설명 추가
3f2a1b4 첫 번째 커밋: README 추가

이제 새 기능을 추가해보려 합니다. 그런데 메인 코드를 바로 건드리기가 좀 꺼려집니다.

어디서 들은 얘기인데, 실무에서 이런 상황이 자주 생긴다고 합니다. 신규 기능을 개발하다가 갑자기 다른 버그를 고쳐달라는 요청이 들어오는 경우요. 작업 중인 코드를 어딘가 치워두고 버그를 고친 다음, 다시 꺼내서 이어서 작업해야 하는데 — 그걸 파일 복사나 백업 폴더로 해결하다 보면 금방 backup_final_진짜최종_v2 같은 폴더가 생긴다는 거죠.

브랜치가 그 문제를 해결하기 위해 있는 기능입니다.


브랜치를 한 마디로 설명하면

브랜치는 특정 커밋을 가리키는 포인터입니다.

처음에 저는 브랜치를 만들면 폴더가 통째로 복사되는 줄 알았습니다. 그렇게 생각하면 브랜치가 무겁고 조심스럽게 느껴지는데, 실제로는 전혀 그렇지 않습니다.

브랜치 하나를 만드는 건, 포스트잇에 커밋 ID를 적어두는 것과 비슷합니다. "나는 여기서부터 시작할 거야"라는 표시를 하는 것이죠. 파일이 복사되지 않으니까 용량도 거의 늘지 않고, 0.001초 안에 만들어집니다.


현재 상태 확인하기

브랜치를 만들기 전에 지금 어느 브랜치에 있는지 확인해봅니다.

git branch
* main

*가 붙은 게 현재 브랜치입니다. 지금은 main에 있습니다.

main도 브랜치입니다. 저장소를 처음 만들면 자동으로 생기는 기본 브랜치예요. 예전엔 master라는 이름이었는데, 요즘은 대부분 main으로 쓰입니다.


브랜치 만들기

feature/login이라는 브랜치를 만들어봅니다.

git branch feature/login

아무 메시지도 안 나옵니다. 잘 만들어진 건지 확인해봅니다.

git branch
  feature/login
* main

feature/login이 생겼습니다. 그런데 *는 여전히 main에 있습니다. 브랜치를 만들었지만 아직 그쪽으로 이동하지는 않은 상태입니다.


브랜치 이동하기 — switch vs checkout

브랜치를 이동할 때 쓰는 명령어가 두 가지 있습니다.

# 오래된 방식
git checkout feature/login

# 새로운 방식 (Git 2.23부터)
git switch feature/login

브랜치 이동만 놓고 보면 결과는 같습니다. 그런데 왜 두 가지가 생겼는지 알아두면 나중에 덜 헷갈립니다.

checkout은 원래 너무 많은 일을 했습니다. 브랜치 이동도 하고, 특정 파일을 이전 커밋 상태로 되돌리는 것도 전부 같은 명령어 하나로 처리했거든요.

git checkout feature/login   # 브랜치 이동
git checkout -- README.md    # README.md를 마지막 커밋 상태로 덮어쓰기 ⚠️

두 번째 명령어가 문제였습니다. 실수로 입력하면 작업 중인 파일 내용이 경고 없이 날아갑니다. 되돌릴 방법도 없고요. 비슷하게 생긴 명령어가 전혀 다른 결과를 냈던 겁니다.

그래서 Git 2.23(2019년)에 역할을 둘로 쪼갰습니다.

git switch feature/login   # 브랜치 이동 전용
git restore README.md      # 파일 되돌리기 전용

switch는 브랜치 이동만, restore는 파일 복구만 담당합니다. 각자 하는 일이 명확해진 거예요.

checkout은 지금도 동작하고 사라진 건 아닙니다. 다만 오래된 블로그나 Stack Overflow 답변에 checkout이 많이 나오기 때문에, 두 명령어 모두 읽을 줄 알아야 합니다. 이 시리즈에서는 앞으로 switch와 restore를 씁니다.

이동해봅니다.

git switch feature/login
Switched to branch 'feature/login'

다시 브랜치 목록을 확인합니다.

git branch
* feature/login
  main

*가 feature/login으로 옮겨왔습니다. 이제 이 브랜치 위에 있습니다.


HEAD가 뭔가요?

git switch를 하면 내부적으로 HEAD가 이동합니다.

HEAD는 "지금 내가 보고 있는 커밋이 어디냐"를 가리키는 특별한 포인터입니다. 브랜치로 이동하면 HEAD가 그 브랜치를 가리키고, 브랜치는 다시 최신 커밋을 가리키는 방식으로 연결됩니다.

HEAD → feature/login → a9b3c12 (최신 커밋)

지금은 feature/login과 main이 같은 커밋을 가리키고 있습니다. 브랜치를 방금 만들었으니까요. 커밋을 추가하면서 두 브랜치가 서로 다른 방향으로 갈라지기 시작합니다.


브랜치에서 커밋 쌓기

feature/login 브랜치에서 새 파일을 만들고 커밋해봅니다.

echo "로그인 기능 작업 중" > login.md
git add login.md
git commit -m "로그인 페이지 초안 추가"
[feature/login c1d2e3f] 로그인 페이지 초안 추가
 1 file changed, 1 insertion(+)
 create mode 100644 login.md

이제 로그를 확인해봅니다.

git log --oneline
c1d2e3f 로그인 페이지 초안 추가
a9b3c12 README에 프로젝트 설명 추가
3f2a1b4 첫 번째 커밋: README 추가

커밋이 3개가 됐습니다. 여기서 중요한 것은, 이 추가된 커밋은 feature/login 브랜치에만 있다는 점입니다.


main으로 돌아가보면

main으로 이동해서 로그를 확인해봅니다.

git switch main
git log --oneline
a9b3c12 README에 프로젝트 설명 추가
3f2a1b4 첫 번째 커밋: README 추가

커밋이 2개뿐입니다. login.md 파일도 없습니다.

ls
README.md

feature/login에서 만든 login.md가 보이지 않습니다. 파일이 사라진 게 아니라, main 브랜치에는 아직 그 커밋이 없는 겁니다. feature/login으로 다시 이동하면 파일이 돌아옵니다.

이게 처음엔 신기하게 느껴질 수 있는데, Git이 브랜치에 따라 작업 디렉토리 자체를 전환해주는 겁니다.


만들고 바로 이동하기

브랜치를 만들 때마다 따로 이동하는 게 번거롭다면, 두 동작을 한 번에 할 수 있습니다.

# checkout 방식
git checkout -b feature/signup

# switch 방식 (권장)
git switch -c feature/signup

-c는 create의 약자입니다. 만들고 바로 이동합니다. 이 방식을 훨씬 자주 쓰게 됩니다.


브랜치 이름 짓는 관례

브랜치 이름은 자유롭게 지을 수 있지만, 팀에서 협업할 때는 일관된 규칙이 있으면 편합니다.

흔히 쓰이는 방식입니다.

접두사 용도 예시
feature/ 새 기능 개발 feature/login, feature/dark-mode
fix/ 버그 수정 fix/login-error, fix/typo
hotfix/ 긴급 수정 (배포 중인 버전) hotfix/security-patch
chore/ 설정, 빌드, 문서 등 chore/update-readme

지금은 혼자 작업하더라도 이런 규칙을 습관으로 들여두면 나중에 팀 합류할 때 훨씬 편합니다.


브랜치 삭제하기

작업이 끝나서 더 이상 필요 없는 브랜치는 지울 수 있습니다.

git branch -d feature/login
Deleted branch feature/login (was c1d2e3f).

단, -d 옵션은 해당 브랜치의 커밋이 다른 브랜치에 이미 merge된 경우에만 삭제합니다. merge 전에 강제로 지우고 싶으면 -D를 씁니다. 이건 커밋을 잃을 수 있으니까 조심해야 합니다.


지금까지의 흐름을 그림으로 보면

main:          C1 ── C2
                         \
feature/login:            C3

C1, C2는 main에서 만든 커밋입니다. C2 시점에서 feature/login 브랜치를 만들고, C3을 커밋했습니다. 이제 두 브랜치는 C2를 공통 조상으로 두고 서로 다른 방향으로 뻗어있습니다.

다음 편에서는 이 구조를 git log --graph 명령어로 터미널에서 직접 시각화하는 방법을 다룹니다. 눈으로 보면 훨씬 이해가 빠릅니다.


이번 편 정리

명령어 하는 일
git branch 브랜치 목록 확인
git branch <이름> 브랜치 생성
git switch <이름> 브랜치 이동
git switch -c <이름> 브랜치 생성 + 이동
git restore <파일> 파일을 마지막 커밋 상태로 되돌리기
git checkout <이름> 브랜치 이동 (구방식 — switch로 대체)
git checkout -b <이름> 브랜치 생성 + 이동 (구방식)
git checkout -- <파일> 파일 되돌리기 (구방식 — restore로 대체)
git branch -d <이름> 브랜치 삭제 (merge된 경우)

핵심 개념 두 가지

  • 브랜치는 파일 복사가 아니라 커밋을 가리키는 포인터다.
  • HEAD는 현재 내가 어느 브랜치(커밋)에 있는지를 가리킨다.

다음 편 예고

브랜치가 여러 개 생기면 "지금 이 프로젝트가 어떻게 생겼지?"가 궁금해집니다. git log만으로는 전체 그림이 잘 안 보이거든요.

다음 편에서는 git log --oneline --graph --all 명령어로 브랜치 트리를 터미널에서 직접 보는 방법을 다룹니다. 여기에 alias를 설정해두면 앞으로 Git 쓰는 게 훨씬 편해집니다.


이 시리즈의 다른 글

  • [기초편 1편] git init과 첫 커밋까지
  • [기초편 3편] git log를 트리로 보는 법 — --graph 옵션과 alias 설정
  • [기초편 4편] merge와 충돌 해결
반응형
저작자표시 비영리 변경금지 (새창열림)

'블로그, 컴퓨터 > DevOps' 카테고리의 다른 글

Git 기초편 6편 — .gitignore 제대로 쓰기  (0) 2026.05.11
Git 기초편 5편 — 원격 저장소 연결하기  (0) 2026.05.11
Git 기초편 4편 — merge와 충돌 해결  (0) 2026.05.10
Git 기초편 3편 — git log를 트리로 보는 법  (1) 2026.05.10
Git 기초편 1편 — git init과 첫 커밋까지  (0) 2026.05.09
'블로그, 컴퓨터/DevOps' 카테고리의 다른 글
  • Git 기초편 5편 — 원격 저장소 연결하기
  • Git 기초편 4편 — merge와 충돌 해결
  • Git 기초편 3편 — git log를 트리로 보는 법
  • Git 기초편 1편 — git init과 첫 커밋까지
생각사람
생각사람
지극히 사적인 연구실
  • 생각사람
    생각사람의 별장
    생각사람
  • 전체
    오늘
    어제
    • 분류 전체보기 (207)
      • 금융 (57)
        • 주식 공부 (11)
        • 파생상품 입문 (17)
        • 파생상품 기초 (15)
        • 파생상품 실전 (14)
      • 블로그, 컴퓨터 (83)
        • 프로그래밍 (16)
        • DevOps (8)
        • AI, RL, ML, ... (5)
        • 애드센스, SEO (23)
        • 임베디드 (3)
        • 컴퓨터 관련 (7)
        • Cheatsheets (21)
      • 다른 공부들 (67)
        • 읽고 쓰기 (18)
        • 수학 (15)
        • 물리 (9)
        • 사진 공부 (25)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 태그

    스트랭글
    슈뢰딩거 방정식
    깃허브
    프로그래밍
    옵션 투자
    github
    선형대수학
    파생상품
    행렬
    AI
    Kreyszig
    선물 옵션
    c++
    코딩
    벡터
    스트래들
    c
    공업수학
    cmake
    웹크롤러
    GIT
    독후감
    version control
    오펜하이머
    옵션
    양자역학
    깃
    CheatSheet
    구글 애드센스
    소니 a6000
  • hELLO· Designed By정상우.v4.10.6
생각사람
Git 기초편 2편 — 브랜치, 어렵지 않아요
상단으로

티스토리툴바