기타

[Git] git reset 동작 차이

jjjjjjyun 2025. 3. 18. 11:13
명령어 커밋 삭제 스테이징 취소 파일 변경 유지
git reset --soft HEAD~1 ✅ 삭제됨 ❌ 유지됨 ❌ 유지됨
git reset --mixed HEAD~1 ✅ 삭제됨 ✅ 취소됨 ❌ 유지됨
git reset --hard HEAD~1 ✅ 삭제됨 ✅ 취소됨 ✅ 삭제됨

 

 

로컬 저장소에 new.txt를 만들어 테스트를 진행했다.

 

 

git add 를 통해 변경사항을 반영해주었다. git status 로 확인하면 staged 상태인 것을 알 수 있다.

 

 

new라는 메시지를 담아 커밋을 올렸다.

git commit -m "new"

 

git log 를 통해 로그를 확인한다.

 

 


1. git reset --soft HEAD~1

stage 상태 유지, 커밋 삭제, 로컬 저장소 파일 유지

ls
new.txt  README.md  test.txt   # 로컬 저장소 파일 유지 모습
git status
On branch user1
Your branch is up to date with 'origin/user1'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   new.txt  # stage 상태 유지

 

 

2. git reset --mixed HEAD~1

stage 상태 취소, 커밋 삭제, 로컬 저장소 파일 유지

ls
new.txt  README.md  test.txt   # 로컬 저장소 파일 유지 모습
git status
On branch user1
Your branch is up to date with 'origin/user1'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	new.txt  # unstage 상태로 변환
  
nothing added to commit but untracked files present (use "git add" to track)

 

git reset --soft 와 마찬가지로, git log 를 보면 커밋 메시지 new는 사라져있다.

 

 

3. git reset --hard HEAD~1

stage 상태 취소, 커밋 삭제, 로컬 저장소 파일 삭제

 

git reset --hard HEAD~1 실행을 하면 다음과 같은 결과가 나온다.

HEAD is now at 899883f test

 

명령 실행 후 ls 명령으로 목록을 조회하면 new.txt 가 사라져있다.

ls
README.md  test.txt   # new.txt는 사라짐

 

git log 결과는 커밋이 사라지기 때문에 다른 명령과 동일하다.