명령어 | 커밋 삭제 | 스테이징 취소 | 파일 변경 유지 |
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 결과는 커밋이 사라지기 때문에 다른 명령과 동일하다.