← 홈페이지 5강 목록으로
🛠
EPISODE 04
stash · reset · revert · cherry-pick · tag · reflog

Git 심화

임시 저장(stash), reset의 3가지 모드, 안전한 revert, 특정 커밋만 가져오는 cherry-pick, 버전 태그, 그리고 잃어버린 커밋을 복구하는 reflog까지.

Gitstashresetreflog
소요 시간
60분
난이도
📊 중급
선수 조건
🎯 git-coop-03
결과물
고급 Git 명령으로 실수와 변경을 자유자재로 다룸

이 강의에서 배우는 것

  • 1stash로 작업을 임시 저장하고 복원한다
  • 2reset --soft/--mixed/--hard 의 차이를 안다
  • 3공개된 커밋은 reset 대신 revert를 사용한다
  • 4cherry-pick으로 특정 커밋만 가져온다
  • 5tag로 릴리즈 버전을 표시한다
  • 6reflog로 잃어버린 커밋을 복구한다

1. git stash

bash
git stash
git stash push -m "로그인 폼 절반 완성"

git stash list
# stash@{0}: On main: 로그인 폼 절반 완성

git stash pop                # 가장 최근 + 목록에서 제거
git stash apply stash@{1}    # 특정 stash, 목록 유지
git stash drop stash@{0}
git stash clear

2. git reset 3가지 모드

옵션커밋스테이징작업 디렉토리
--soft취소유지유지
--mixed취소취소유지
--hard취소취소취소
bash
# 커밋만 취소, 변경은 스테이징 상태로 유지
git reset --soft HEAD~1

# 커밋 취소 + 스테이징 해제 (기본값)
git reset HEAD~1

# 커밋 취소 + 변경 완전 삭제 ⚠️
git reset --hard HEAD~1
⚠️

git reset은 로컬에서만! push된 커밋을 reset하면 팀원의 히스토리와 충돌.

3. git revert — 공개 커밋 안전 되돌리기

bash
git revert abc1234        # 특정 커밋
git revert HEAD           # 최근 커밋
git revert HEAD~3..HEAD   # 여러 커밋
git revert --no-commit HEAD
resetrevert
동작커밋 삭제되돌리기 커밋 추가
히스토리변경됨보존됨
안전성로컬 전용push된 커밋도 안전
팀 작업위험권장

4. git cherry-pick

bash
git cherry-pick abc1234            # 특정 커밋
git cherry-pick abc1234 def5678    # 여러 개
git cherry-pick abc1234..def5678   # 범위

# 충돌 해결 후
git add .
git cherry-pick --continue
git cherry-pick --abort

예: feature 브랜치의 버그 수정 커밋만 main에 적용.

5. git tag

bash
git tag v1.0.0                       # 경량 태그
git tag -a v1.0.0 -m "첫 정식 릴리즈"  # 주석 태그 (권장)
git tag -a v0.9.0 abc1234 -m "베타"   # 특정 커밋

git tag                  # 목록
git tag -l "v1.*"        # 패턴
git show v1.0.0          # 상세

git push origin v1.0.0       # 태그 push
git push origin --tags       # 모든 태그

git tag -d v1.0.0            # 로컬 삭제
git push origin :v1.0.0      # 원격 삭제

6. git reflog — 위험한 상황 복구

HEAD가 이동한 모든 이력. reset --hard로 삭제한 커밋도 reflog로 복구 가능!

bash
git reflog
# abc1234 HEAD@{0}: reset: moving to HEAD~3   ← 잘못된 reset!
# def5678 HEAD@{1}: commit: feat: 중요한 기능

git reset --hard HEAD@{1}    # 방금 전 상태로
git reset --hard def5678     # 해시로 복구
💡

reflog는 로컬에만 — gc 실행 시 사라질 수 있습니다.

예제 코드 / 강의 자료

전체 강의 자료와 예제 코드는 GitHub에서 자유롭게 받아볼 수 있습니다.

GitHub에서 보기 ↗