[Git] commit 되돌리기 - reset

박하연·2025년 3월 4일

Git

목록 보기
8/10

git reset

특정 커밋을 기준으로 브랜치의 히스토리를 재설정,
이전 커밋 상태로 되돌리거나 히스토리에서 제거할 수 있다.
커밋, 스테이징, 작업 디렉토리에 영향
협업시에는 신중하게 사용

reset 옵션

  1. Soft (--soft)
  • 커밋만 되돌리며, 스테이징(대기) 영역과 working directory는 유지
    git reset --soft 커밋id
  1. Mixed (기본)
  • 커밋과 스테이징 영역을 되돌리며, working directory는 그대로 유지
    git reset 커밋id
  1. Hard (--hard)
  • 커밋, 스테이징, 작업 디렉토리 모두 지정된 상태로 되돌림
  • 데이터 손실 가능
    git reset --hard 커밋id

Unstaged changes after reset:
M test.js
작업디렉토리에서 파일이 변경된 상태로 남아있다고 알려준다

4, 5번째 커밋히스토리는 삭제되었지만 파일 내용은 남아있어서 다시 커밋하거나 수정가능하다

  • git에 push 처리 후 git reset을 이용해 되돌아가 이전커밋내역을 삭제처리해준다.


에러가 발생한다.


원격저장소에는 3, 4, 5번째의 커밋이 존재하는데 로컬저장소에는 존재하지 않아서 push 실행을 거부한다.

해결방안? $git push -f / --force 강제푸시 실행


강제푸시 실행된 결과

삭제된 3, 4, 5번째 커밋은 되돌릴 수 없나?

  • git reset은 히스토리에서만 커밋을 삭제시키고 파일은 작업디렉토리에 그대로 남아있어 다시 커밋하거나 수정 가능하다.

삭제되었던 3, 4, 5번째 커밋이 다시 복구된 것을 확인할 수 있다.

--hard 옵션을 사용하면 삭제된 커밋을 복구할 수 없다.

git reset --hard 명령어로 2번째 커밋 상태로 되돌렸기 때문에 커밋할 내용이 없다고 출력됨


원격저장소에도 2번째 이후 커밋들은 지워져있다.

--hard 처리해서 없어진 커밋들은 복구가 불가능한가??
git reflog(참조 로그)로 복구 가능하다

git reflog(참조 로그)는 커밋을 참조한 로그를 본다.
즉 HEAD 이동기록, 커밋에 대한 모든 변경 사항을 보관해준다.


1. $git reflog 로 커밋id, 커밋참조값 확인
2. $git cherry-pick 되돌리고 싶은 commit 복사
3. $git push

0개의 댓글