git stash: 작업 임시 저장
급하게 다른 브랜치로 이동해야 할 때, 커밋하기엔 아직 이른 작업을 임시 저장합니다.
# 현재 작업 임시 저장
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 전 커밋 이력을 깔끔하게 정리합니다.
# 최근 3개 커밋 수정
git rebase -i HEAD~3
에디터가 열립니다:
pick a1b2c3d feat: 기능 A
pick b2c3d4e 오타 수정
pick c3d4e5f fix: 버그 수정
명령어를 변경:
pick a1b2c3d feat: 기능 A
squash b2c3d4e 오타 수정 # 이전 커밋과 합치기
reword c3d4e5f fix: 버그 수정 # 메시지만 수정
| 명령 | 설명 |
|---|---|
pick | 그대로 유지 |
squash (s) | 이전 커밋과 합치기 |
reword (r) | 메시지 수정 |
drop (d) | 커밋 삭제 |
edit (e) | 커밋 내용 수정 |
git cherry-pick: 특정 커밋만 가져오기
다른 브랜치의 특정 커밋만 현재 브랜치에 적용합니다.
# 커밋 해시 확인
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: 커밋 되돌리기
flowchart LR
C3["커밋 C"]
C2["커밋 B"]
C1["커밋 A"]
C1 --> C2 --> C3
HEAD["HEAD"] --> C3
HEAD -->|"reset --soft HEAD~1"| C2soft["커밋 B\n(변경사항은 staged 유지)"]
HEAD -->|"reset --hard HEAD~1"| C2hard["커밋 B\n(변경사항 삭제!)"]
# 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를 사용합니다. 새 커밋을 만들어 되돌립니다.
# 특정 커밋을 되돌리는 새 커밋 생성
git revert a1b2c3d
# 여러 커밋
git revert HEAD~3..HEAD
# 커밋 없이 변경사항만 적용
git revert --no-commit a1b2c3d
git reflog: 삭제된 커밋 복구
실수로 reset --hard를 했어도 복구할 수 있습니다.
# 모든 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 폴더 구조 (참고)
.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에 타입을 더해 안전한 코드를 작성하는 방법입니다.