C
협업 & Git/브랜치/Lesson 03

브랜치 — Branch · Merge · Rebase · Conflict · Stash

45분·theory

브랜치 — Branch · Merge · Rebase · Conflict · Stash

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ Git Flow vs Trunk-based Development
  • ✅ rebase vs merge 차이 + 사용 시점
  • ✅ Squash merge + 커밋 정리

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

브랜치 사용 흐름 6단계

1. 생성git checkout -b feature/login (main 에서 분기)
2. 작업·커밋 — 코드 수정 + git commit. main 영향 X
3. pushgit push -u origin feature/login — 원격에 추적 브랜치
4. PR 생성 — GitHub에서 Pull Request. 동료 리뷰 요청
5. 승인 → 머지 — 리뷰 통과 + CI 통과 → main 에 머지
6. 브랜치 삭제 — 머지 후 더 이상 필요 X. git branch -d 또는 GitHub UI

> 💡 브랜치 = 평행 우주. main 은 운영 코드, feature 는 실험 코드. 실험 실패 시 브랜치만 버리면 끝.

Merge vs Rebase — 두 가지 통합 방식

Mergegit merge feature 로 main 에 합치기

  • 결과: Merge Commit 새로 생성. 분기 흔적 남음
  • 장점: 안전. 원본 커밋 보존
  • 단점: 히스토리 복잡 (다이아몬드 모양)

Rebasegit rebase main 으로 feature 를 main 위로 옮기기

  • 결과: 선형 히스토리. 깔끔
  • 장점: 가독성 ↑. 한 줄 시간선
  • 단점: 커밋 해시 새로 생성. 푸시된 브랜치엔 위험

언제 뭘?

상황선택
공유 브랜치Merge (안전)
내 로컬 featureRebase (정리)
main 에 통합팀 정책 따름
푸시 후절대 Rebase X

충돌 해결 4가지 옵션

같은 줄을 다르게 수정 → Git 이 충돌 마커 삽입:

code
<<<<<<< HEAD
내 변경
=======
상대 변경
>>>>>>> feature

해결 방법:
1. 내 것 선택 (Accept Current) — 위 코드만 남기고 마커·아래 삭제
2. 상대 것 선택 (Accept Incoming) — 아래 코드만 남기고 마커·위 삭제
3. 둘 다 살리기 (Accept Both) — 양쪽 모두 유지, 마커만 제거
4. 새로 작성 — 양쪽 무시하고 새로 (가장 흔함, 둘 다 부족할 때)

해결 후:

bash
git add <충돌 파일>
git commit                    # merge 메시지 자동
# 또는 포기:
git merge --abort             # 원래대로 복귀

> 💡 IDE 추천: VS Code·IntelliJ 에 충돌 해결 GUI 내장. 'Accept Both' 버튼이 가장 안전.

Git Stash — 작업 임시 서랍

시나리오: feature/login 작업 중인데 운영 버그 → 지금 고쳐야 함

해결:

bash
git stash push -m "WIP 로그인"   # 1. 작업 트리 정리 + 서랍에 보관
git checkout main                # 2. main 으로 이동
git checkout -b hotfix/critical  # 3. hotfix 분기 + 수정 + 머지 + 배포
git checkout feature/login       # 4. 원래 브랜치로 복귀
git stash pop                    # 5. 서랍에서 꺼내 작업 트리에 복원

기타 명령:

  • git stash list — 서랍 목록 보기
  • git stash show -p — 변경 내용 미리보기
  • git stash drop — 서랍 비우기 (복구 불가)
  • git stash apply — pop 과 같지만 서랍에 남김

> ⚠️ stash 가 너무 쌓이면 잊혀짐. 작업 후 즉시 pop 또는 commit 으로 정리 권장.

💻 📌 브랜치 명령어 cheatsheet
# === 브랜치 생성·이동 ===
git branch                          # 로컬 브랜치 목록
git branch -a                       # 원격 포함 전체
git checkout -b feature/x           # 새 브랜치 생성 + 이동
git switch -c feature/x             # 동일 (모던 명령)
git checkout main                   # 이동만
git branch -d feature/x             # 브랜치 삭제 (머지된 것만)
git branch -D feature/x             # 강제 삭제

# === 병합 ===
git merge feature/x                 # main 에 feature 병합 (merge commit 생성)
git merge --no-ff feature/x         # 무조건 merge commit 생성
git merge --abort                   # 충돌 시 머지 취소

# === 리베이스 ===
git rebase main                     # feature 를 main 위로 (선형)
git rebase --continue               # 충돌 해결 후 계속
git rebase --abort                  # 원래대로 복귀
git rebase -i HEAD~3                # 최근 3 커밋 대화형 정리

# === Stash (임시 저장) ===
git stash push -m "WIP"             # 변경 사항 서랍에 보관
git stash list                      # 서랍 목록
git stash pop                       # 가장 최근 서랍 → 작업 트리 (서랍에서 제거)
git stash apply stash@{1}           # 특정 서랍 적용 (서랍 유지)
git stash drop stash@{0}            # 서랍 삭제

# === 원격 브랜치 ===
git push -u origin feature/x        # 첫 push, 추적 설정
git push origin --delete feature/x  # 원격 브랜치 삭제
git fetch --prune                   # 사라진 원격 브랜치 정리

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 hotfix 를 main 으로 머지하는 안전한 git revert 절차 알려줘"
  • "이 feature 브랜치의 커밋들을 squash + rebase 로 정리해줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

브랜치 — Branch · Merge · Rebase · Conflict · Stash - 협업 & Git