Git School · FluxGit

마지막 Git 커밋 취소: soft reset과 revert

FluxGit ·

각 블록은 다른 경우이며 하나의 실행 스크립트가 아닙니다. 저장소에 맞는 경우를 선택하고 브랜치 이름, 경로와 VERIFIED_COMMIT을 바꾸세요. 중단 명령은 해당 작업이 진행 중일 때만 사용하며 두 대안을 모두 실행하지 마세요.

핵심 답변

로컬 마지막 커밋을 취소하면서 변경을 유지하려면 reset --soft로 브랜치를 부모로 옮기고 인덱스와 파일을 남깁니다. 공유한 커밋에는 revert로 반대 변경을 추가합니다. 코드를 보존할지, 다른 사람이 이력을 갖고 있는지를 먼저 판단하세요.

예시와 전제 조건

예시는 부모가 있는 일반 비병합 커밋이 현재 끝이며 트리가 깨끗하고 무관한 스테이지 변경이 없습니다. 첫 커밋에는 HEAD^가 없고 merge에는 부모가 여러 개 있습니다. 둘은 이 단축 절차의 조건 밖입니다. HEAD~1을 만능 취소로 쓰지 말고 그래프를 읽으세요.

변경 전에 상태 확인

패치, 상태와 공유 여부를 확인합니다. 커밋을 풀어 코드를 계속 작성하기, 공개 코드를 뒤집기, 모두 버리기는 서로 다른 결과입니다. 공개 브랜치 재작성 전에 조정하세요. 최근 날짜나 자신의 작성자 이름만으로 비공유 상태를 판단할 수 없습니다.

git status --short
git log -3 --oneline --decorate
git show --stat HEAD

참조나 별도 체크아웃 보존

HEAD에 rescue/before-undo를 만들어 원본 커밋 상태를 보존합니다. 미커밋 파일은 별도 저장하며 브랜치가 보관하지 않습니다. 깨끗한 예시에서는 soft reset으로 해당 패치만 스테이지에 나타납니다. 이미 바뀐 인덱스라면 여러 작업이 섞일 수 있어 별도 검토합니다.

git branch rescue/before-undo HEAD
SCHOOL_UNDO=$(git rev-parse HEAD)

첫 번째 절차

로컬 변경 유지에는 reset --soft HEAD^ 후 diff --cached를 읽습니다. 내용은 인덱스와 트리에 남아 다시 커밋할 수 있습니다. mixed reset은 인덱스에 다른 효과가 있습니다. 표시를 줄이려는 이유만으로 파일도 바꾸는 --hard로 전환하지 마세요.

git reset --soft HEAD^
git diff --cached
git status --short

다른 결과를 의도적으로 선택

공유한 일반 커밋이라면 확인한 ID를 SCHOOL_UNDO에 저장하고 revert합니다. 기존 이력을 유지하며 반대 변경을 새 커밋으로 만듭니다. 일반 push 전에 결과와 프로젝트 검사를 확인하세요. merge revert는 mainline 부모와 후속 병합 효과를 이해해야 하므로 전용 절차를 씁니다.

git revert "$SCHOOL_UNDO"

제한과 예외

revert는 이후 작업과 충돌할 수 있습니다. status를 읽고 해결·스테이지한 다음 revert --continue를 씁니다. 선택이 틀리면 revert --abort입니다. reset --soft에는 같은 계속·중단 상태가 없습니다. 활성 revert를 둔 채 다른 이력 수정을 시작하지 않습니다.

git status
git revert --abort

충돌과 정리

커밋 코드와 로컬 파일도 버리는 것은 추가 파괴적 판단입니다. 먼저 저장 상태를 확인하세요. 미커밋 작업은 reflog에 없습니다. restore points가 켜지고 로컬 변경이 감지되면 FluxGit은 지원되는 hard reset 전에 safety stash를 저장할 수 있습니다. 이 터미널은 그 보호 작업을 호출하지 않습니다.

결과 확인

soft reset 후 끝과 스테이지 패치를 구조 참조와 비교합니다. revert 후 원하는 동작만 반대로 바뀌고 필요한 이후 작업은 남는지 확인합니다. 프로젝트 검사를 하고 검토 중에는 구조를 유지하세요. Git이 오류 없이 끝나도 코드의 정확성을 보장하지 않습니다.

git log -4 --oneline --decorate
git status --short
git diff --cached

자주 묻는 질문

soft reset은 파일을 지우지 않고 참조를 옮기며 트리와 인덱스를 유지합니다. revert는 원본을 지우지 않고 반대 변경을 추가합니다. reflog는 남은 로컬 참조와 커밋 객체 기록이지 임의의 저장되지 않은 파일 복구 도구가 아닙니다.

FluxGit에서 작업 검토

FluxGit의 시각적 이력과 변경 보기로 작업과 관련 커밋을 검토하세요. 이 예시의 브랜치, 공유 여부와 로컬 파일 검사를 유지합니다. 다운로드 페이지에서 현재 제공되는 빌드와 플랫폼을 확인할 수 있습니다.

Git 공식 문서

관련 절차

FluxGit 다운로드