GitGit/GitHub 기초강의 6개 중 6번째난이도 입문

Git 고급 기능 — stash, rebase, cherry-pick

발행 읽는 시간 약 2 분

  • Git
  • stash
  • rebase
  • cherry-pick
  • reset
  • 고급

강의 소개

stash로 작업을 임시 저장하고, interactive rebase로 커밋을 정리하고, cherry-pick으로 특정 커밋만 가져오는 실무 기법을 배웁니다.

git stash: 작업 임시 저장#

급하게 다른 브랜치로 이동해야 할 때, 커밋하기엔 아직 이른 작업을 임시 저장합니다.

Bash
# 현재 작업 임시 저장
git stash
# Saved working directory and index state WIP on main: a1b2c3d

# 저장된 stash 목록
git stash list
# stash@{0}: WIP on main: a1b2c3d 기능 개발 중
# stash@{1}: WIP on feature: b2c3d4e 다른 작업

# 가장 최근 stash 복원 (삭제됨)
git stash pop

# 특정 stash 복원 (삭제 안 함)
git stash apply stash@{1}

# stash 삭제
git stash drop stash@{0}
git stash clear   # 전체 삭제

git rebase -i: 커밋 정리#

interactive rebase로 push 전 커밋 이력을 깔끔하게 정리합니다.

Bash
# 최근 3개 커밋 수정
git rebase -i HEAD~3

에디터가 열립니다:

Text
pick a1b2c3d feat: 기능 A
pick b2c3d4e 오타 수정
pick c3d4e5f fix: 버그 수정

명령어를 변경:

Text
pick a1b2c3d feat: 기능 A
squash b2c3d4e 오타 수정   # 이전 커밋과 합치기
reword c3d4e5f fix: 버그 수정  # 메시지만 수정
명령설명
pick그대로 유지
squash (s)이전 커밋과 합치기
reword (r)메시지 수정
drop (d)커밋 삭제
edit (e)커밋 내용 수정

git cherry-pick: 특정 커밋만 가져오기#

다른 브랜치의 특정 커밋만 현재 브랜치에 적용합니다.

Bash
# 커밋 해시 확인
git log --oneline feature/hotfix
# f1e2d3c fix: 결제 버그 긴급 수정
# a9b8c7d feat: 새 결제 UI

# main에 버그 수정 커밋만 적용
git switch main
git cherry-pick f1e2d3c

# 여러 커밋
git cherry-pick f1e2d3c a9b8c7d

# 충돌 시
git cherry-pick --continue
git cherry-pick --abort   # 취소

git reset: 커밋 되돌리기#

Diagram · Mermaid
Bash
# soft: 커밋만 취소, 변경사항 staged 유지
git reset --soft HEAD~1

# mixed (기본): 커밋 취소, 변경사항 unstaged
git reset HEAD~1

# hard: 커밋 취소 + 변경사항 완전 삭제 (주의!)
git reset --hard HEAD~1

# 특정 커밋으로
git reset --hard a1b2c3d

git revert: 안전하게 되돌리기#

push한 커밋은 reset 대신 revert를 사용합니다. 새 커밋을 만들어 되돌립니다.

Bash
# 특정 커밋을 되돌리는 새 커밋 생성
git revert a1b2c3d

# 여러 커밋
git revert HEAD~3..HEAD

# 커밋 없이 변경사항만 적용
git revert --no-commit a1b2c3d

git reflog: 삭제된 커밋 복구#

실수로 reset --hard를 했어도 복구할 수 있습니다.

Bash
# 모든 HEAD 이동 이력
git reflog
# a1b2c3d HEAD@{0}: reset: moving to HEAD~1
# b2c3d4e HEAD@{1}: commit: feat: 기능 추가
# a1b2c3d HEAD@{2}: commit: 초기 설정

# 복구
git reset --hard b2c3d4e

.git 폴더 구조 (참고)#

Text
.git/
├── HEAD          ← 현재 브랜치
├── config        ← 저장소 설정
├── objects/      ← 모든 커밋/파일 데이터
├── refs/
│   ├── heads/    ← 로컬 브랜치
│   └── remotes/  ← 원격 브랜치
└── COMMIT_EDITMSG ← 마지막 커밋 메시지

정리#

명령어역할
git stash작업 임시 저장
git stash pop저장된 작업 복원
git rebase -i HEAD~N커밋 정리 (squash 등)
git cherry-pick <hash>특정 커밋만 적용
git reset --soft HEAD~1커밋 취소 (변경사항 유지)
git revert <hash>되돌리는 새 커밋 생성
git reflog삭제된 커밋 복구

Git/GitHub 기초 시리즈를 완료했습니다. 다음은 TypeScript 기초 — JavaScript에 타입을 더해 안전한 코드를 작성하는 방법입니다.

Follow · Ask · Work

이 글이 도움이 됐다면

짧은 작업 기록과 데모는 인스타그램에 올립니다. 만들고 싶은 것이 있다면 프로젝트 의뢰나 협업 제안도 편하게 보내 주세요.

글쓴이

파란여우

직접 만든 AI 앱·제품의 개발·배포를 공개하는 실전형 테크 크리에이터

파란여우 소개 Instagram @bluefox._.hi

이어서 보기

만들고 싶은 것이 있다면 프로젝트 의뢰로 알려 주세요.