Skip to main content

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)
          ↑
       현재 브랜치
git reset --soft B
결과:

A---B   (HEAD)
  ↑
스테이징 영역에는 C, D의 변경사항이 유지됨
git reset --hard B
결과:

A---B   (HEAD)
  ↑
C, D 커밋은 완전히 제거됨 (작업 디렉토리도 초기화)

4. 옵션별 설명

🔹 --soft

git reset --soft <커밋해시>
  • 커밋만 되돌림
  • 변경사항은 스테이징 상태로 유지됨

📌 사용 예:

커밋 메시지를 실수했을 때, 커밋만 취소하고 다시 커밋하고 싶을 때


🔹 --mixed (기본 옵션)

git reset --mixed <커밋해시>
  • 커밋 & 스테이징만 초기화
  • 작업 디렉토리는 그대로 남음

📌 사용 예:

add만 하고 아직 커밋 안 했을 때, git add를 되돌리고 싶을 때


🔹 --hard

git reset --hard <커밋해시>
  • 커밋, 스테이징, 작업 디렉토리 전부 초기화

📌 사용 예:

모든 변경사항을 완전히 삭제하고 과거 상태로 돌리고 싶을 때
⚠️ 복구 불가한 경우가 많으므로 주의!


5. 실습 예시

# 초기 커밋 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
# 마지막 커밋을 취소하고 이전 상태로 복귀
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 + 작업물 전부 취소

되돌릴 수 없음 *주의