Git을 사용하다 보면 커밋을 취소해야 하는 상황이 종종 발생합니다.
파일을 빼먹었거나, 커밋 메시지를 잘못 작성했거나, 또는 잘못된 변경사항을 커밋했을 때 우리는 이를 취소할 필요가 있습니다.
git reset --hard HEAD~1
이 방법은 가장 최근 커밋을 완전히 삭제합니다
커밋했던 모든 변경사항이 사라집니다
작업 디렉토리도 이전 상태로 돌아갑니다
예시:
# 변경 전
file.txt: "Hello World! New changes"
# git reset --hard HEAD~1 실행 후
file.txt: "Hello World!" # 이전 상태로 완전히 복원
git reset --soft HEAD~1
가장 최근 커밋만 취소하고 변경사항은 유지됩니다
커밋된 변경사항들이 스테이징 영역에 남아있습니다
파일을 추가하거나 수정한 후 다시 커밋할 수 있습니다
예시:
# 변경 전
file.txt: "Hello World! New changes" (커밋된 상태)
# git reset --soft HEAD~1 실행 후
file.txt: "Hello World! New changes" (스테이징된 상태)
Hard Reset을 사용하는 경우
Soft Reset을 사용하는 경우 (권장)
# 1. 파일 수정
echo "New content" > file.txt
# 2. 변경사항 스테이징
git add file.txt
# 3. 커밋
git commit -m "Add new content"
# 4-a. 완전히 삭제하고 싶을 때
git reset --hard HEAD~1 # 모든 변경사항 삭제
# 4-b. 변경사항 유지하고 커밋만 취소하고 싶을 때
git reset --soft HEAD~1 # 변경사항은 스테이징 영역에 유지
대부분의 경우 --soft 옵션을 사용하는 것이 안전합니다.
변경사항을 유지한 채로 커밋만 취소할 수 있어 실수를 만회하기 쉽습니다.
--hard 옵션은 정말 필요한 경우에만 신중하게 사용하세요.