Git을 좀 다뤄봤다면 이런 상황이 있었을 것이다 👇
“지금 급하게 다른 브랜치로 이동해야 하는데,
아직 작업 중인 코드는 커밋하면 안 돼요!”
또는,
“예전에 특정 커밋 하나만 가져오고 싶은데
전체 코드를 합치긴 싫어요.”
이럴 때 필요한 것이 바로 stash, tag, cherry-pick이다.
이 세 가지는 실무 개발자가 꼭 알아야 하는 “생산성 3대 명령어”다.
💡 1. Git Stash — 작업을 임시로 저장하기
“커밋하지 않고 현재 작업 상태를 잠시 숨겨두는 기능”
🔹 상황 예시
로그인 기능을 수정 중인데, 갑자기 다른 브랜치 버그를 고쳐야 할 때!
👉 커밋은 아직 하기 이르고, 그렇다고 코드를 버릴 수도 없다.
이럴 때 쓰는 게 바로 git stash
⚙️ 사용법
git stash
✅ 결과
Saved working directory and index state WIP on feature/login
이제 현재 코드가 임시 저장소(stash) 로 들어가고,
작업 폴더는 깨끗한 상태로 돌아간다.
💬 “git stash” = “잠깐 숨겨두기”
🔍 임시 저장 목록 보기
git stash list
✅ 결과
stash@{0}: WIP on feature/login: 123abc 로그인 UI 수정 중
🔄 저장한 내용 복원하기
git stash apply
→ 마지막 stash 복원 (하지만 목록은 남아있음)
💡 완전히 꺼내고 삭제하려면:
git stash pop
→ 복원 후 stash 목록에서 제거
🧹 특정 stash 삭제
git stash drop stash@{0}
또는 전체 삭제:
git stash clear
💡 실무 활용 팁
- QA나 Hotfix 작업 중 현재 코드 잠깐 보관용으로 자주 사용
- 브랜치 이동 전 stash → 이동 후 pop 활용
🏷️ 2. Git Tag — 특정 시점에 ‘이름표’ 달기
“중요한 버전을 구분하기 위해 커밋에 라벨을 붙인다.”
예를 들어,
- v1.0.0 → 첫 배포 버전
- v1.1.0 → 신규 기능 추가 버전
이런 식으로 버전별 구분이 가능하다.
⚙️ 태그 만들기
git tag v1.0.0
또는 설명 추가 버전:
git tag -a v1.0.0 -m "첫 번째 정식 배포"
✅ 결과
Tagged commit a3f9b1e as v1.0.0
🔍 태그 목록 확인
git tag
✅ 결과
v1.0.0
v1.1.0
📤 태그를 GitHub에 업로드
git push origin v1.0.0
모든 태그 한 번에 업로드:
git push origin --tags
❌ 태그 삭제
git tag -d v1.0.0
git push origin :refs/tags/v1.0.0
💡 실무 활용 팁
- 릴리즈 버전 관리 (e.g., v2.3.1)
- CI/CD 자동 배포 트리거 (태그 푸시 시 자동 빌드)
- 긴급 버전 식별 (예: hotfix-2025-11-04)
🍒 3. Git Cherry-pick — 특정 커밋만 골라서 반영하기
“다른 브랜치의 특정 커밋 하나만 가져오기”
예를 들어 👇
feature/login 브랜치에서 커밋 하나를
main 브랜치에도 반영하고 싶을 때!
⚙️ 사용법
- 먼저 커밋 ID 확인:
git log --oneline
✅ 예시 결과
a3f9b1e 로그인 UI 수정
c2d4e7b 버그 수정
- cherry-pick 실행:
git cherry-pick a3f9b1e
✅ 결과
[main a3f9b1e] 로그인 UI 수정
1 file changed, 2 insertions(+)
→ 해당 커밋만 현재 브랜치로 가져온다!
⚠️ 충돌 발생 시
다른 브랜치와 코드가 겹친다면 충돌이 날 수 있다.
이럴 땐 직접 수정 후:
git add .
git cherry-pick --continue
💬 cherry-pick도 결국 병합의 한 형태이므로,
merge처럼 충돌 해결 과정이 필요할 수 있다.
❌ cherry-pick 취소하기
git cherry-pick --abort
작업을 취소하고 이전 상태로 되돌릴 수 있다.
💡 실무 활용 예시
상황 명령어 설명
| 핫픽스 코드만 main에 반영 | git cherry-pick <commit> | 긴급 수정만 가져오기 |
| QA용 브랜치에 특정 기능만 반영 | 동일 명령 | 배포 전 선별적 테스트 |
| 실험 브랜치에서 특정 결과만 옮기기 | 동일 명령 | 안전한 선택적 반영 |
⚙️ 4. 실무 예시 — 세 기능을 함께 쓰는 순간
예를 들어 이런 상황 👇
- feature/payment 작업 중인데
→ main의 버그를 고쳐야 함 - 현재 작업을 임시 저장
- git stash
- main으로 이동 → hotfix 수정
- git switch main git cherry-pick c2d4e7b
- 수정 완료 후 다시 돌아와
- git switch feature/payment git stash pop
- 태그 붙여 릴리즈
- git tag v1.2.0 git push origin --tags
💬 이런 조합이 바로 실무형 Git 루틴이다.
복잡한 상황에서도 효율적으로 대처 가능하다.
🧠 5. 세 명령어 비교 요약표
명령어 역할 주요 목적 주의점
| stash | 임시 저장 | 미완성 작업 잠시 보관 | 커밋 안 하면 유실 위험 |
| tag | 버전 라벨 | 릴리즈 시점 기록 | 삭제 시 주의 |
| cherry-pick | 선택 반영 | 특정 커밋만 옮기기 | 충돌 주의 |
💬 기억하기:
“Stash는 숨기고, Tag는 표시하고, Cherry-pick은 가져온다.”
🏁 마무리 — “작은 기능이지만, 큰 효율을 만든다”
이 세 가지 명령은 처음엔 사소해 보여도
협업 속도를 2배, 실수 확률을 0으로 줄여주는 도구다.
프로젝트가 커질수록,
이런 ‘작은 도구의 조합’이 개발 생산성을 결정짓는다.
💬 “Git을 잘 쓰는 사람은, 코드를 지키는 사람이다.”
다음 편에서는
✅ GitHub에서 Pull Request(PR)로 협업하는 리뷰 워크플로우를 배워본다.
'git' 카테고리의 다른 글
| ⚙️ Git 자동화 완전 가이드 — Git Hooks와 GitHub Actions으로 CI/CD 구축하기 (0) | 2025.11.04 |
|---|---|
| 🤝 GitHub 협업 워크플로우 완전 정복 — PR, Issue, Review의 모든 것 (0) | 2025.11.04 |
| ⚔️ Git 충돌(conflict) 해결 완벽 가이드 — 진짜 실무에서 겪는 상황별 정리 (0) | 2025.11.04 |
| 🧭 실무 브랜치 전략 완벽 정리 — Git Flow vs Trunk Based (0) | 2025.11.04 |
| ⏪ Git 되돌리기 완벽 정리 — reset, revert, restore 차이 한 번에 이해하기 (0) | 2025.11.04 |