///

Git Undo Commits Capsule

git reset HEAD 는 마지막 커밋을 되돌리되 작업 트리는 그대로 유지한다. 공개된 커밋은 git revert 로 "거울 커밋" 을 만들어야 이력이 깨지지 않는다. 사라진 커밋은 git reflog 로 복구 가능.

///

kind: capsule status: active visibility: private license: CC-BY-SA-4.0 summary: 커밋 되돌리기 완전 치트시트 — reset HEAD~ (소프트 취소), reset --hard (폐기), revert (공개 이력 보존), ORIG_HEAD로 재커밋, reflog로 복구. tags: - git - undo - reset - revert - reflog - capsule


Git Undo Commits Capsule

Summary#

git reset HEAD~ 는 마지막 커밋을 되돌리되 작업 트리는 그대로 유지한다. 공개된 커밋은 git revert 로 "거울 커밋" 을 만들어야 이력이 깨지지 않는다. 사라진 커밋은 git reflog 로 복구 가능.

Claim#

1. 방금 한 로컬 커밋만 취소하고 수정#

git commit -m "실수"            # 0: 사고
git reset HEAD~                 # 1: 커밋만 취소, 파일은 그대로
# 수정 후
git add .                       # 2
git commit -c ORIG_HEAD         # 3: 기존 메시지 재사용 (수정 창 열림)
# or -C ORIG_HEAD 로 메시지 그대로
  • reset 이 이전 HEAD 를 .git/ORIG_HEAD 로 백업 → commit -c ORIG_HEAD 로 메시지 재사용
  • commit --amend 는 작업 트리 변경을 그 자리에서 합치는 한 줄짜리 변형

2. 커밋 자체를 완전히 버리기#

git reset --hard HEAD~1         # 워킹 디렉토리 변경도 같이 날아감 ⚠️
git reset --hard <sha>          # 특정 커밋으로 복귀

--hard작업 트리를 덮어쓴다 → 실행 전 필요한 변경은 git stash 로 저장.

3. 이미 push 한 커밋 되돌리기#

git revert <sha>                # 거울 커밋 생성 (이력 보존)
# 또는 강제 push (협업 중이면 다른 사람 pull 이 다시 밀어 올림 ⚠️)
git push origin HEAD --force

협업 중인 브랜치에서는 revert 가 안전한 기본값.

4. 리베이스 되돌리기#

git reflog                                 # HEAD@{N} 형태로 이력 보임
git reset --soft "HEAD@{2}"                # 리베이스 직전 상태로 복귀 (작업 변경 유지)
# 또는 브랜치별 reflog
git reflog "branchname@{1}"

--hard 는 작업본도 폐기, --soft 는 스테이지/작업본 유지.

5. "삭제된" 커밋 찾기#

git reflog 는 GC 전까지 HEAD 이동 기록을 보관 → 잘못 버린 커밋의 SHA 여기서 회수.

Scope#

  • Git 1.7.0+ 기본 동작. --force-with-lease (2.30+) 는 --force 대체 안전판.
  • 로컬 레벨 작업은 거의 모든 것이 reflog 로 복구 가능 (90일 TTL 기본).

Caveats#

  • git reset --hard 는 작업본을 즉시 폐기. 확인 전에 git status + git stash.
  • push --force 는 공동 브랜치에서 타인 커밋 덮어씀 → --force-with-lease 권장.
  • reflog로컬 전용. 리모트에는 남지 않음.
  • commit --amend 는 이미 push 한 커밋에 쓰면 force-push 필요 (위와 동일 주의).

Source#

Supplementary: - gahooa — How do I delete a commit from a branch? - Lara Bailey — Undoing a git rebase

Sagwan Revalidation 2026-04-18T21:49:54Z#

  • verdict: ok
  • note: Git 1.7.0+ 기준 reset/revert/reflog 동작은 2026년 현재도 동일하며, 주요 권장안과 경고 모두 유효하다.