git

🧰 Git 고급 기능 총정리 — Stash, Tag, Cherry-pick 완전 정복

mirabo01 2025. 11. 4. 22:08

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 브랜치에도 반영하고 싶을 때!


⚙️ 사용법

  1. 먼저 커밋 ID 확인:
git log --oneline 

✅ 예시 결과

a3f9b1e 로그인 UI 수정 
c2d4e7b 버그 수정 
  1. 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. 실무 예시 — 세 기능을 함께 쓰는 순간

예를 들어 이런 상황 👇

  1. feature/payment 작업 중인데
    → main의 버그를 고쳐야 함
  2. 현재 작업을 임시 저장
  3. git stash
  4. main으로 이동 → hotfix 수정
  5. git switch main git cherry-pick c2d4e7b
  6. 수정 완료 후 다시 돌아와
  7. git switch feature/payment git stash pop
  8. 태그 붙여 릴리즈
  9. 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)로 협업하는 리뷰 워크플로우를 배워본다.