02-05 stash · tag · cherry-pick

실전에서 자주 구하는 세 도구 — 작업 임시 보관(stash), 버전 표시(tag), 커밋 선별 적용(cherry-pick).


실전에서 자주 구하는 세 도구 — 작업 임시 보관(stash), 버전 표시(tag), 커밋 선별 적용(cherry-pick).

목표: 상황에 맞춰 세 명령을 능숙하게 활용


🎒 git stash — 작업 임시 보관

급히 다른 브랜치로 가야 하는데 커밋하기 애매한 변경이 있을 때.

git stash                    # 변경을 치워두고 깨끗한 상태로
git stash -u                 # untracked 파일까지 포함
git stash push -m "로그인 작업"  # 메시지 붙여 저장
git stash list               # 목록 (stash@{0}, {1}...)
git stash show -p stash@{0}  # 내용 미리보기(diff)
git stash pop                # 최근 것 꺼내고 목록에서 제거
git stash apply stash@{1}    # 특정 것 적용(목록에 유지)
git stash drop stash@{0}     # 삭제
git stash clear              # 전체 삭제
git stash branch new-branch  # stash에서 새 브랜치 생성

[!tip] pop vs apply pop = apply + drop. 적용이 잘 될지 불확실하면 apply로 먼저 적용해보고, 괜찮으면 따로 drop하는 게 안전하다.

전형적 흐름:

git stash                    # 작업 치우기
git switch main && git pull  # 급한 일 처리
git switch feature
git stash pop                # 작업 복구

🏷️ git tag — 버전 태그

특정 커밋(보통 릴리스)에 고정 이름표를 붙인다.

git tag                          # 목록
git tag -l "v1.*"                # 패턴 필터
git tag v1.0.0                   # 가벼운 태그(이름만)
git tag -a v1.0.0 -m "첫 릴리스"  # 주석 태그(작성자/날짜/메시지, 권장) ⭐
git tag -a v1.0.0 9f3a1c2        # 특정 과거 커밋에 태그
git show v1.0.0                  # 태그 정보

가벼운 태그 vs 주석 태그

구분가벼운(lightweight)주석(annotated)
저장커밋 포인터만별도 객체(작성자·날짜·메시지·서명)
용도임시 북마크공식 릴리스(권장)

태그 푸시 (자동 전송 안 됨!)

git push origin v1.0.0       # 특정 태그
git push origin --tags       # 전체 태그
git tag -d v1.0.0            # 로컬 삭제
git push origin --delete v1.0.0  # 원격 삭제

🍒 git cherry-pick — 커밋 선별 적용

다른 브랜치의 특정 커밋만 골라 현재 브랜치에 복사한다.

git cherry-pick <commit>     # 커밋 1개 적용
git cherry-pick A B C        # 여러 개
git cherry-pick A^..B        # A 다음부터 B까지 범위
git cherry-pick -n <commit>  # 적용만(커밋은 보류)
git cherry-pick -x <commit>  # 원본 커밋 해시를 메시지에 기록
git cherry-pick --abort      # 충돌 시 취소
git cherry-pick --continue   # 충돌 해결 후 계속
graph LR
    subgraph "main"
        M1["C1"] --> M2["C2"]
    end
    subgraph "release"
        R1["C1"] --> R2["hotfix(C2 복사)"]
    end
    M2 -.->|"cherry-pick"| R2

용도: hotfix 커밋을 release 브랜치에도 반영, 특정 기능 커밋만 먼저 빼오기.

[!warning] 중복 커밋 주의 cherry-pick은 새 해시의 복사본을 만든다. 나중에 두 브랜치를 병합하면 같은 변경이 중복될 수 있다(보통 Git이 자동 처리하지만 충돌 가능).


📋 체크리스트

  • stash로 작업 임시 보관·복구
  • pop vs apply 차이
  • 가벼운 태그 vs 주석 태그
  • 태그를 명시적으로 push
  • cherry-pick으로 커밋 선별 적용
  • cherry-pick 중복 커밋 주의점

🔗 관련 노트

  • 02-04-gitignore와-파일-관리 — 이전
  • 02-06-대화형-리베이스와-히스토리-정리 — 다음
  • 01-05-되돌리기와-복구 — reflog 복구
  • 02-03-커밋-컨벤션과-시맨틱-버저닝 — 태그와 SemVer

마지막 업데이트: 2026-06-02