Git Reset --hard
마지막 업데이트
git reset --hard는 브랜치를 대상 커밋으로 이동시키고, 스테이징 영역과 작업 트리 모두가 그것과 정확히 일치하도록 강제합니다. 그 과정에서 커밋되지 않은 모든 변경 사항이 폐기됩니다. git reset의 형태 중 가장 파괴적이므로, 실행하기 전에 현재 작업이 더 이상 필요하지 않은지 반드시 확인하세요.
실수로 커밋을 리셋했나요? hard reset은 보통 git reflog로 복구할 수 있습니다. 터미널 플레이그라운드에서 안전하게 시도해 보세요 - 브라우저 안의 진짜 셸입니다.
구문
| Command | What it does |
|---|---|
git reset --hard | 커밋되지 않은 모든 변경 사항을 폐기한다 (HEAD에 머무름) |
git reset --hard HEAD~1 | 마지막 커밋과 그 변경 사항을 제거한다 |
git reset --hard <hash> | 브랜치를 특정 커밋으로 강제로 되돌린다 |
git reset --hard origin/main | 로컬 브랜치를 원격과 정확히 일치시킨다 |
hard reset 복구하기
리셋으로 폐기한 커밋된 작업은 보통 아직 복구할 수 있습니다.
| Step | Command | Result |
|---|---|---|
| 1 | git reflog | HEAD가 있었던 위치를 해시와 함께 나열한다 |
| 2 | git reset --hard <hash> | 리셋 이전의 커밋으로 되돌아간다 |
git reset --hard 자주 묻는 질문
git reset --hard는 실제로 무엇을 하나요?
현재 브랜치를 대상 커밋으로 이동시키고, 스테이징 영역과 작업 트리 모두를 그것과 일치하도록 덮어씁니다. 커밋되지 않은 모든 변경 사항은 - 스테이징되었든 아니든 - 폐기됩니다. 변경 사항을 스테이징 상태로 유지하는
--soft와 스테이징 해제 상태로 유지하는 --mixed에 비해, --hard는 변경 사항을 버리는 유일한 모드입니다.모든 로컬 변경 사항을 어떻게 폐기하나요?
커밋을 지정하지 않고
git reset --hard를 실행하면 작업 트리가 마지막 커밋으로 리셋되어 커밋되지 않은 편집이 지워집니다. reset이 건드리지 않는 추적되지 않은 파일까지 제거하려면 뒤이어 git clean -fd를 실행하세요.브랜치를 원격과 일치하도록 어떻게 리셋하나요?
git fetch를 실행한 다음 git reset --hard origin/main을 실행하세요 (자신의 브랜치로 바꾸세요). 이렇게 하면 로컬 브랜치가 원격과 정확히 일치하도록 강제되며, 원격에서 갈라진 로컬 커밋과 변경 사항이 폐기됩니다 - 로컬 브랜치가 잘못되어 원격 버전만 원할 때 유용합니다.git reset --hard를 되돌릴 수 있나요?
커밋된 작업은 보통 가능합니다:
git reflog를 실행해 리셋 전에 브랜치가 가리키던 커밋을 찾은 다음 git reset --hard <hash>로 되돌아가세요. 한 번도 커밋되지 않은 변경 사항 (작업 트리에만 있는 것) 은 복구할 수 없으므로 --hard는 신중하게 다루세요.이것을 온라인에서 연습할 수 있나요?
네. 터미널 플레이그라운드를 열면 브라우저 안의 진짜 셸에서
git reset --hard를 실행할 수 있습니다 - 설치할 것이 없습니다. Coddy의 무료 인터랙티브 Git 강좌에서도 리셋과 변경 사항 되돌리기를 단계별로 다룹니다.