1 분 소요

git reset은 Git에서 작업 내용을 취소하거나 특정 커밋 상태로 되돌릴 때 사용하는 강력한 명령어입니다.
이 명령은 Git의 HEAD 포인터를 이동시키고, 필요에 따라 인덱스(Index, Staging Area)와 작업 디렉토리(Working Directory)도 변경합니다.
git reset은 주로 아래의 세 가지 모드로 사용됩니다:

–soft: 커밋만 되돌리기

HEAD 포인터만 이전 커밋으로 이동합니다.
Staging Area(인덱스)와 작업 디렉토리는 그대로 유지됩니다.
이미 커밋된 변경 사항을 커밋 히스토리에서 삭제하고 싶을 때 유용합니다.

git reset --soft <커밋 ID>

예시

git log
# 커밋 기록: 1 commit -> 2 commit -> 3 commit
git reset --soft 3 commit

결과: HEAD가 B로 이동하며, C의 변경 사항은 스테이징 영역에 남아있습니다.

–mixed (기본값): 커밋과 스테이징 영역 되돌리기

HEAD를 이전 커밋으로 이동하고, 해당 커밋 이후의 변경 사항을 스테이징 영역에서 제거합니다.
하지만 작업 디렉토리는 그대로 유지됩니다.
변경 사항은 여전히 파일로 존재하므로, 다시 스테이징할 수 있습니다.

git reset --mixed <커밋 ID>
git reset --mixed HEAD~1

결과: 가장 최근 커밋을 취소하고, 변경 사항은 작업 디렉토리에 그대로 남아있습니다.

–hard: 모든 것 되돌리기

HEAD, 스테이징 영역, 작업 디렉토리 모두 지정된 커밋 상태로 완전히 되돌립니다.
변경 사항은 복구할 수 없으니, 신중히 사용해야 합니다.

git reset --hard <커밋 ID>
git reset --hard HEAD~1

결과: 가장 최근 커밋뿐 아니라 작업 디렉토리의 변경 사항도 완전히 제거됩니다.

유용한 옵션 및 상황별 활용

특정 파일만 되돌리기

git reset <파일 경로>

Staging Area에서 해당 파일을 제거합니다. 작업 디렉토리는 그대로 유지됩니다.

이전 상태를 복구하기

git reset 명령어는 커밋 기록을 수정하거나 삭제할 때 유용하지만, 실수로 변경 사항을 잃어버릴 수 있습니다. 중요한 데이터를 잃어버렸다면 아래 명령으로 복구를 시도할 수 있습니다.

git reflog
  • reflog는 Git의 HEAD가 이동한 모든 기록을 보여줍니다.
  • 기록에서 필요한 커밋 ID를 찾아 다시 체크아웃하거나 복구할 수 있습니다.

태그:

카테고리:

업데이트:

댓글남기기