브랜치 실습 예시

브랜치를 만들고 작업하고 병합하는 흐름을 시나리오로 익히는 가이드  |  ← 매뉴얼로 돌아가기

대상 Git 버전2.40 이상 (최신 2.54.0 기준)
이 파일의 목적매뉴얼을 보완하는 실습·교육용 시나리오 예시집
매뉴얼 문서Branching_Manual.html — 각 시나리오에서 링크로 연결됩니다
작성일2026년 6월 13일
● 초급 브랜치 처음 다루기 새 브랜치를 만들어 작업하고, 끝나면 합치거나 버리는 기본 흐름
G-1 초급 기능 브랜치를 만들어 작업하기
지금 my-site 폴더에서 main 브랜치에 있습니다. 새 '문의하기' 기능을 추가하려는데, main은 안정적으로 두고 따로 작업 공간을 만들고 싶습니다. 작업 대상은 이 폴더의 main 브랜치입니다.
단계별 실행
  1. 지금 내가 어느 브랜치인지 확인

    git branch 목록에서 * 표시가 현재 브랜치입니다. main인지 봅니다.

  2. 새 기능 브랜치를 만들면서 바로 이동

    git switch -c는 브랜치를 생성하고 그 자리로 옮겨 줍니다.

  3. 새 브랜치에서 작업하고 커밋

    여기서 한 변경은 main에 영향을 주지 않습니다.

git branch                       # 현재 브랜치 확인(* 표시)
git switch -c feature/contact     # 브랜치 생성 + 이동을 한 번에
# ... contact.html 작성 ...
git add contact.html
git commit -m "문의하기 페이지 추가"
git switch -c feature/contactgit branch feature/contact(생성만)와 git switch feature/contact(이동)를 한 번에 합친 것입니다. 이제부터의 커밋은 main이 아니라 feature/contact 위에 쌓입니다.
브랜치 이름은 feature/contact처럼 '용도/내용' 형태로 지으면 한눈에 무슨 작업인지 알 수 있습니다. 처음엔 git switch -c 하나만 외워도 충분합니다.
G-2 초급 작업 끝낸 브랜치를 main에 병합하기
G-1에서 만든 feature/contact 브랜치에서 '문의하기' 작업을 끝내고 커밋까지 마쳤습니다. 그동안 main에는 다른 변경이 없었습니다. 이제 이 결과를 main에 합치려 합니다.
단계별 실행
  1. 합칠 대상인 main으로 먼저 이동

    병합은 '현재 브랜치'로 다른 브랜치를 끌어옵니다. main으로 가야 main에 합쳐집니다.

  2. feature 브랜치를 병합

    main이 갈라진 뒤 변하지 않았으므로 포인터만 앞으로 이동하는 Fast-forward가 일어납니다.

  3. 역할이 끝난 브랜치 삭제

    병합된 브랜치는 -d로 안전하게 지웁니다.

git switch main                  # 합칠 대상으로 이동
git merge feature/contact         # main이 안 변했으면 Fast-forward
git branch -d feature/contact     # 병합 끝난 브랜치 정리
main이 갈라진 시점 이후로 새 커밋이 없으면 Git은 새 병합 커밋을 만들지 않고 main 포인터를 feature 끝으로 옮기기만 합니다. 이것이 Fast-forward입니다. 이력이 한 줄로 깔끔하게 이어집니다.
입문 단계의 표준 흐름은 이렇습니다: main에서 git switch -c feature/x → 작업·커밋 → git switch maingit merge feature/xgit branch -d feature/x. 이 한 줄 흐름만 몸에 익혀도 대부분의 작업을 처리할 수 있습니다.
G-3 초급 실험하던 브랜치를 그냥 버리기
experiment/new-layout 브랜치에서 새 레이아웃을 시도해 봤는데 마음에 들지 않습니다. 이 실험은 main에 합치지 않고 통째로 버리려 합니다. 현재 이 실험 브랜치에 있습니다.
단계별 실행
  1. 버릴 브랜치에서 빠져나오기

    지금 서 있는 브랜치는 삭제할 수 없으니 먼저 main으로 옮깁니다.

  2. 실험 브랜치를 강제 삭제

    main에 병합하지 않았으므로 안전 삭제(-d)는 거부됩니다. 버릴 결심이 섰으면 -D로 강제 삭제합니다.

  3. 목록에서 사라졌는지 확인
git switch main                       # 버릴 브랜치에서 나오기
git branch -D experiment/new-layout    # 병합 안 됐어도 강제 삭제
git branch                             # 목록에서 사라졌는지 확인
-D(대문자)는 병합되지 않은 커밋까지 함께 버립니다. 정말 필요 없는 실험일 때만 사용하세요. 합치고 싶은 마음이 조금이라도 있으면 먼저 G-2처럼 병합부터 검토합니다.
● 중급 충돌과 정리에 익숙해지기 병합 충돌을 손으로 풀고, 잘못 만든 브랜치를 정리하고, 브랜치 사이를 빠르게 오가는 단계
D-1 중급 병합하다 생긴 충돌 해결하기
feature/header에서 index.html의 제목 줄을 고쳤는데, 그동안 main에서도 같은 줄을 다르게 고쳤습니다. main으로 옮겨 병합하니 충돌이 났습니다. 현재 main 브랜치에서 git merge feature/header를 막 실행한 상태입니다.
단계별 실행
  1. 어떤 파일이 충돌했는지 확인

    git status가 'both modified'로 충돌 파일을 알려 줍니다.

  2. 파일을 열어 마커를 보고 직접 수정

    <<<<<<< / ======= / >>>>>>> 사이에서 원하는 코드만 남기고 마커 줄은 모두 지웁니다.

  3. 해결한 파일을 add 해 '해결됨' 표시
  4. 커밋해서 병합을 마무리

    이때 만들어지는 것이 병합 커밋입니다.

git status                       # both modified: index.html
# index.html을 열어 아래 마커를 직접 정리한다
#   <<<<<<< HEAD
#   (main 쪽 내용)
#   =======
#   (feature/header 쪽 내용)
#   >>>>>>> feature/header
git add index.html               # 해결됨으로 표시
git commit                       # 병합 커밋 작성
양쪽 브랜치가 같은 부분을 다르게 바꾸면 Git은 어느 쪽이 맞는지 판단할 수 없어 멈추고 사람에게 넘깁니다. 마커 사이에서 남길 코드를 고르고 마커 줄(<<<, ===, >>>)을 모두 지운 뒤 addcommit 하면 해결됩니다.
충돌이 복잡해 손대기 어렵다면 git merge --abort로 병합 전 상태로 깨끗이 되돌릴 수 있습니다. 마음을 가다듬고 다시 시도하세요.
D-2 중급 잘못 만든 브랜치 정리하기
브랜치 이름을 feature/login으로 만들려다 오타로 feautre/login을 만들었습니다. 아직 이 브랜치엔 아무 작업도 안 했고, main에서 갈라지기만 한 상태입니다. 깔끔하게 지우고 제대로 다시 만들려 합니다.
단계별 실행
  1. 현재 브랜치 목록을 확인

    오타 브랜치가 있고, 지금 어디 서 있는지 봅니다.

  2. 지울 브랜치가 아닌 main으로 이동

    현재 서 있는 브랜치는 지울 수 없습니다.

  3. 오타 브랜치 삭제 후 올바른 이름으로 재생성

    작업이 없어 main에 병합된 상태와 같으므로 안전 삭제 -d가 가능합니다.

git branch                       # feautre/login 오타 확인
git switch main                  # 지울 브랜치에서 나오기
git branch -d feautre/login       # 작업 없으니 -d로 안전 삭제
git switch -c feature/login       # 올바른 이름으로 다시 생성+이동
작업한 커밋이 전혀 없는 브랜치는 main과 같은 위치이므로 '병합된 것'으로 취급돼 -d로 깔끔히 지워집니다. 만약 -d가 거부하면 그 브랜치에 합치지 않은 커밋이 있다는 신호이니, 정말 버릴지 한 번 더 확인하세요.
D-3 중급 직전 브랜치로 빠르게 오가기
feature/payment에서 작업하던 중, main에서 급한 사항을 잠깐 확인해야 합니다. main에 다녀온 뒤 다시 작업하던 브랜치로 돌아오려 합니다. 긴 브랜치 이름을 매번 타이핑하기 번거롭습니다.
사용 명령어
단계별 실행
  1. main으로 잠깐 이동

    확인할 것을 봅니다.

  2. 직전 브랜치로 한 번에 복귀

    git switch -는 '방금 전에 있던 브랜치'로 되돌아갑니다.

git switch main                  # main에서 급한 것 확인
# ... 확인 끝 ...
git switch -                     # 직전 브랜치(feature/payment)로 복귀
git switch --는 '바로 직전에 있던 브랜치'를 가리키는 약식 표기입니다. 두 브랜치 사이를 자주 왕복할 때 switch -만 반복하면 이름을 칠 필요가 없습니다.
브랜치를 옮기기 전에 작업 중인 변경은 커밋해 두는 습관을 들이세요. 커밋하지 않은 변경이 있으면 이동이 막히거나 그대로 따라올 수 있어, 어디서 무엇을 했는지 헷갈리기 쉽습니다.
● 고급 여러 브랜치 운영하기 여러 기능 브랜치를 main과 함께 굴리고, 병합 방식을 골라 이력을 설계하는 단계
P-1 고급 여러 기능 브랜치를 main과 함께 운영하기
feature/searchfeature/profile 두 기능을 나란히 진행 중입니다. main에는 그사이 다른 수정도 들어갔습니다. 두 기능을 차례로 main에 합치려 합니다. 현재 main 브랜치에 있고, 두 브랜치 모두 작업·커밋이 끝났습니다.
단계별 실행
  1. 합칠 대상 main에 있는지 확인

    git branch로 진행 중인 브랜치들과 현재 위치를 점검합니다.

  2. 첫 기능을 병합 커밋을 남기며 합치기

    main에도 진행이 있었으니 3-way 병합이 일어납니다. --no-ff를 쓰면 '이 지점에서 기능을 합쳤다'는 병합 커밋이 항상 남아 이력에서 기능 단위가 또렷합니다.

  3. 두 번째 기능도 같은 방식으로 병합
  4. 병합 끝난 브랜치들 정리
git branch                          # 진행 중 브랜치/현재 위치 확인
git switch main
git merge --no-ff feature/search    # 병합 커밋을 남기며 합침
git merge --no-ff feature/profile
git branch -d feature/search feature/profile
양쪽 브랜치가 각자 진행되면 Git은 두 흐름을 묶는 병합 커밋을 만듭니다(3-way 병합). --no-ff는 Fast-forward로 합칠 수 있는 경우에도 일부러 병합 커밋을 남겨, 나중에 이력만 봐도 어떤 기능이 언제 합쳐졌는지 알 수 있게 합니다.
기능마다 별도 브랜치를 쓰면 충돌은 합치는 순간에만 마주치므로, 작업 중에는 서로 방해받지 않습니다. 자주 main의 변경을 자기 브랜치로 가져와 맞춰 두면 마지막 병합이 한결 수월합니다.
P-2 고급 squash로 잔커밋을 하나로 모아 병합하기
feature/signup 브랜치에 "wip", "오타", "다시 수정" 같은 자잘한 커밋이 여러 개 쌓였습니다. main 이력에는 이 과정을 다 남기지 않고, '회원가입 기능 구현' 한 줄로 깔끔하게 합치고 싶습니다. 현재 main 브랜치에 있습니다.
단계별 실행
  1. 합칠 대상 main으로 이동
  2. 변경만 모아 오기(squash)

    --squash는 feature의 모든 변경을 스테이징에 모아 줄 뿐, 커밋은 자동으로 만들지 않습니다.

  3. 하나의 메시지로 직접 커밋

    여러 잔커밋이 깔끔한 한 커밋으로 main에 남습니다.

  4. 역할이 끝난 브랜치 삭제

    --squash는 병합 이력을 남기지 않으므로 -d가 거부하면 -D로 지웁니다.

git switch main
git merge --squash feature/signup    # 변경만 스테이징에 모음(커밋은 안 함)
git commit -m "회원가입 기능 구현 (폼·검증·에러 처리)"
git branch -d feature/signup         # 거부되면 git branch -D feature/signup
--squash는 일반 병합과 달리 병합 커밋을 만들지도, feature의 개별 커밋을 가져오지도 않습니다. 변경 내용만 작업 폴더와 스테이징에 모아 주므로, 마지막에 직접 git commit을 해야 비로소 main에 한 커밋으로 기록됩니다.
--squash로 합치면 main은 feature가 병합됐다는 사실을 모릅니다. 그래서 git branch -d가 "병합 안 됨"이라며 거부할 수 있는데, 이는 정상입니다. 변경을 이미 커밋했음을 확인했다면 -D로 지워도 안전합니다.

Git 2.54.0 기준 · 2026년 6월 13일 작성
← 브랜치 매뉴얼  |  GitHub 실습 →