# git reset --- ## 1. Git Reset 이란? `git reset`은 Git에서 ****브랜치의 현재 위치(HEAD)를 다른 커밋으로 되돌리거나****, ****스테이징 상태를 해제하거나****, ****작업 디렉토리까지 초기화****하는 명령어이다. > "방금 했던 커밋/추가/수정... 지우고 다시 하고 싶어!" 할 때 사용한다. --- ## 2. reset 동작 범위 비교
옵션 HEAD 이동 Staging Area 변경 작업 디렉토리 변경
`--soft` ✅ O ❌ 그대로 ❌ 그대로
`--mixed` ✅ O ✅ 초기화 ❌ 그대로
`--hard` ✅ O ✅ 초기화 ✅ 완전 초기화
--- ## 3. 시각화 예시 ``` 현재 상태: A---B---C---D (HEAD) ↑ 현재 브랜치 ``` ```bash git reset --soft B ``` ``` 결과: A---B (HEAD) ↑ 스테이징 영역에는 C, D의 변경사항이 유지됨 ``` ```bash git reset --hard B ``` ``` 결과: A---B (HEAD) ↑ C, D 커밋은 완전히 제거됨 (작업 디렉토리도 초기화) ``` --- ## 4. 옵션별 설명 ### 🔹 `--soft` ```bash git reset --soft <커밋해시> ``` - ****커밋만 되돌림**** - 변경사항은 ****스테이징 상태****로 유지됨 📌 사용 예: > 커밋 메시지를 실수했을 때, 커밋만 취소하고 다시 커밋하고 싶을 때 --- ### 🔹 `--mixed` (기본 옵션) ```bash git reset --mixed <커밋해시> ``` - 커밋 & ****스테이징만 초기화**** - 작업 디렉토리는 그대로 남음 📌 사용 예: > add만 하고 아직 커밋 안 했을 때, `git add`를 되돌리고 싶을 때 --- ### 🔹 `--hard` ```bash git reset --hard <커밋해시> ``` - ****커밋, 스테이징, 작업 디렉토리 전부 초기화**** 📌 사용 예: > 모든 변경사항을 완전히 삭제하고 과거 상태로 돌리고 싶을 때 > ⚠️ ****복구 불가한 경우가 많으므로 주의!**** --- ## 5. 실습 예시 ```bash # 초기 커밋 3개 생성 echo "a" > a.txt && git add . && git commit -m "A" echo "b" > b.txt && git add . && git commit -m "B" echo "c" > c.txt && git add . && git commit -m "C" git log --oneline ``` ```bash # 마지막 커밋을 취소하고 이전 상태로 복귀 git reset --soft HEAD~1 # C는 스테이징 상태로 돌아감 git reset --mixed HEAD~1 # C는 unstage됨 git reset --hard HEAD~1 # C는 완전히 삭제됨 ``` --- ## 6. `git reset` vs `git revert` 비교
명령어 기존 커밋을 새로운 커밋? 안전성 사용처
`reset` ****삭제함**** ❌ X 위험 혼자 쓰는 브랜치, 최근 실수 복구
`revert` ****보존함**** ✅ O 안전 협업 브랜치, 히스토리 보존 필요 시
--- ## ✅ 요약
옵션 설명 주의 사항
`--soft` 커밋만 취소, staging은 그대로 메시지 실수 복구에 유용
`--mixed` 커밋 + staging 취소, 작업물은 유지 기본값
`--hard` 커밋 + staging + 작업물 전부 취소 ****되돌릴 수 없음**** \*주의
---