콘텐츠로 건너뛰기
GitTree

Git 가이드

Git 재설정, 리베이스 및 커밋 실행 취소: Git에서 (거의) 모든 것을 복구하는 방법

Git은 작업을 영원히 버리는 경우가 거의 없습니다. 다음은 마지막 커밋, 수정, git 재설정 --hard, 리베이스, 삭제된 브랜치 또는 git reflog를 사용한 강제 푸시를 실행 취소하는 방법과 GitTree의 Undo가 한 번의 클릭으로 대부분의 작업을 처리하는 방법입니다.

작성자: Kodmora업데이트됨 10분 읽음
GitTree 체리 선택, 되돌리기, 브랜치 생성, 태그 지정 및 비교 작업이 포함된 커밋 메뉴

git 재설정, 리베이스 또는 커밋을 실행 취소하려면 git reflog을 실행하고 실수 직전의 항목을 찾아 브랜치를 다시 가리킵니다(예: git reset --hard HEAD@{1}). Git은 HEAD와 각 브랜치의 모든 이동을 reflog에 기록하고 기본적으로 손실된 커밋 항목도 30일(브랜치에 있는 커밋의 경우 90일) 동안 유지하므로 커밋된 작업이 거의 사라지지 않습니다. 한 가지 실제 예외는 당신이 결코 약속하지 않은 일입니다.

다음은 흔히 발생하는 각 실수에 대한 방법입니다. 모든 명령은 일반 Git이며 macOS, Windows 및 Linux에서 동일하게 작동합니다. Windows에서는 Git for Windows과 함께 제공되는 Git Bash에서 실행합니다. PowerShell에는 따옴표로 묶인 HEAD@{1}과 같은 리프로그 이름이 필요하며 grep이 없습니다. 마지막에는 데스크톱 Git 클라이언트인 GitTree가 어떻게 19가지 작업에 대한 복구 스냅샷을 유지하여 대부분의 실수가 한 번의 클릭으로 다시 발생하는지 확인할 수 있습니다.

Git 실행 취소 치트 시트: 각 실수에 대한 명령

상황을 찾은 다음 실행하기 전에 해당 섹션을 읽으십시오. HEAD@{1}은 "한 번 이동하기 전에 HEAD가 있었던 위치"를 의미합니다. 그 이후로 다른 명령을 실행했다면 먼저 git reflog로 올바른 숫자를 찾으세요.

일반적인 Git 실수에 대한 실행 취소 명령
실수명령조심하세요
마지막 커밋, 변경 사항 유지git reset --soft HEAD~1푸시하지 않은 커밋에 대해서만
마지막 커밋, 이미 푸시됨git revert HEAD이전 커밋을 취소하는 커밋을 추가합니다.
나쁜 git commit --amendgit reset --soft HEAD@{1}HEAD가 다시 움직이기 전에 실행하세요.
git reset --hardgit reset --hard HEAD@{1}커밋되지 않은 변경 사항은 리플로그에 없습니다.
완성된 리베이스git reset --hard ORIG_HEAD다음 재설정, 병합 또는 리베이스는 ORIG_HEAD를 덮어씁니다.
로컬 병합git reset --hard ORIG_HEAD푸시되면 git revert -m 1 <merge>을(를) 사용하세요.
삭제된 지점git branch <name> <hash>해시는 삭제 메시지 또는 리플로그에 있습니다.
떨어진 은닉물git stash apply <hash>해시는 드롭 메시지에 있습니다.
강제 푸시git push --force-with-lease origin <hash>:main그 사이에 개입한 사람에게 경고하세요.

Git reflog 설명: 모든 명령에 따른 안전망

reflog(참조 로그)는 HEAD와 지점 팁이 가리키는 개인 일기입니다. 모든 커밋, 체크아웃, 재설정, 병합, 리베이스, 수정 및 가져오기는 한 줄을 추가하고 origin/main과 같은 원격 추적 분기도 한 줄을 얻습니다. 로컬 .git 폴더에만 상주합니다. 푸시되지 않으며 새 복제본은 빈 폴더로 시작됩니다.

git reflog
git reflog show main
git reflog --date=relative

리베이스 이후의 일반적인 git reflog는 다음과 같습니다. 최신 항목이 먼저 표시됩니다.

6c55495 HEAD@{0}: rebase (finish): returning to refs/heads/feature-login
6c55495 HEAD@{1}: rebase (pick): Validate the email field
cb6e15e HEAD@{2}: rebase (pick): Add the login form
2c44bc3 HEAD@{3}: rebase (start): checkout main
595b83d HEAD@{4}: commit: Validate the email field

실수 이전의 최신 줄을 읽어보세요. 여기에서는 HEAD@{4}, rebase (start) 이전에 이루어진 커밋입니다. Git이 커밋을 예상하는 곳이면 어디든 해당 해시나 해당 이름을 사용하세요. main@{2.hours.ago}도 작동합니다. 항목은 90일 후 또는 분기에 도달할 수 없는 커밋의 경우 30일 후에 만료되며 항목이 존재하는 동안 git gc 커밋을 유지합니다.

4단계로 git reflog를 사용하여 손실된 커밋 복구

  1. 리플로그 나열

    한 분기에 대해 git reflog 또는 git reflog show <branch>를 실행하고 실수 이전의 최신 항목을 기록해 둡니다.

  2. 커밋 검사

    git log --oneline -5 HEAD@{4}을 실행하여 이것이 원하는 상태인지 확인하세요. 아직 아무것도 바뀌지 않았습니다.

  3. 구조 지점에 저장하세요.

    git branch rescue HEAD@{4}을(를) 실행하세요. 파일은 그대로 유지되며 커밋은 더 이상 만료되지 않습니다.

  4. 지점을 다시 이동하세요.

    아직 필요한 것을 커밋하거나 숨기고, 깨진 분기에서 git reset --hard rescue를 실행한 다음, git branch -d rescue를 사용하여 도우미를 삭제하세요.

Git 실행 취소 마지막 커밋: 소프트, 혼합 또는 하드 재설정

커밋이 여전히 컴퓨터에만 있는 경우 git reset는 분기를 한 커밋 뒤로 이동합니다. 모드는 변경 사항에 대해 결정합니다.

git reset --soft HEAD~1
git reset HEAD~1
git reset --hard HEAD~1
  • --soft는 변경 사항을 미리 준비하여 다시 커밋할 수 있도록 합니다. 메시지를 수정하거나 잊어버린 파일을 추가하는 데 이상적입니다.
  • 기본값인 --mixed는 작업 폴더의 변경 사항을 스테이지되지 않은 상태로 유지하므로 커밋을 분할할 수 있습니다.
  • --hard는 커밋되지 않은 편집 내용과 함께 커밋과 함께 변경 사항을 삭제합니다. reflog는 한동안 커밋을 유지하지만 다시 생각해 보세요.

이미 푸시한 경우 다시 작성하지 마세요. git revert HEAD는 이를 취소하는 새 커밋을 기록합니다. 무료 강의 푸시 후 실수 복구에서는 되돌리기 및 기타 안전한 되돌리기 방법을 다룹니다.

git commit 실행 취소 --amend

수정은 커밋을 새 커밋으로 대체합니다. 원본은 리플로그에 남아 있습니다. 수정 직후 git reset --soft HEAD@{1}는 분기를 원본에 다시 배치하고 추가된 수정 내용을 그대로 둡니다. 나중에 git reflog에서 commit (amend) 줄을 찾아 그 아래 항목을 사용하세요.

git reset --soft HEAD@{1}

git Reset --hard 실행 취소 방법

하드 리셋은 브랜치를 이동하고 파일을 덮어쓰지만 삭제된 커밋은 여전히 Git의 객체 데이터베이스에 남아 있습니다. 리플로그에는 이동이 reset: moving to HEAD~2로 표시되고 그 아래 줄은 현재 있었던 위치입니다. 재설정이 마지막 명령인 경우 모든 것이 다시 돌아옵니다.

git reflog
git reset --hard HEAD@{1}
git fsck --lost-found

git rebase를 실행 취소하는 방법

충돌로 인해 리베이스가 중지된 경우 git rebase --abort는 분기, 색인 및 파일을 원래 위치로 반환합니다. 완료되면 돌아갈 수 있는 방법이 두 가지 있습니다. Git은 리베이스가 시작될 때 이전 팁에서 ORIG_HEAD을 가리키므로 즉시 git reset --hard ORIG_HEAD가 이를 취소합니다. 더 견고한 것은 여전히 ​​브랜치 자체의 리프로그입니다. 리베이스는 브랜치를 rebase (finish)에서 한 번만 이동하므로 feature-login@{1}는 브랜치와 정확히 동일합니다. 리베이스 또는 체리 선택이 일시 중지되면 활성 작업 계속, 건너뛰기 또는 중단 단원에서 각 방법을 설명합니다.

git rebase --abort
git reset --hard ORIG_HEAD
git reset --hard feature-login@{1}

리베이스된 브랜치를 푸시한 경우 이를 복원하려면 강제 푸시가 필요합니다(아래 참조). 의도적으로 기록을 다시 작성하려면 Git GUI의 대화형 리베이스 가이드를 읽어보세요.

Git 병합 실행 취소

또한 병합은 ORIG_HEAD에 이전 팁을 남기므로 git reset --hard ORIG_HEAD는 푸시하지 않은 팁을 취소합니다. 충돌이 진행 중인 경우 git merge --abort에서 나가거나 Git 병합 충돌 해결 가이드를 따르세요. 푸시된 병합은 git revert -m 1 <merge-commit>을 사용하여 되돌려집니다. 나중에 해당 분기를 다시 병합하면 되돌리기를 되돌리지 않는 한 해당 변경 사항이 다시 적용되지 않습니다.

git merge --abort
git reset --hard ORIG_HEAD
git revert -m 1 <merge-commit>

삭제된 Git 브랜치(및 삭제된 숨김) 복구

브랜치를 삭제하면 커밋이 아닌 이름이 삭제됩니다. git branch -D는 분기가 가리키는 팁을 인쇄하고 해당 해시에서 분기를 다시 생성하면 이를 복원합니다.

git branch feature-login 1a2b3c4
git reflog | grep "moving from feature-login"

그 출력을 잃었나요? HEAD의 리플로그는 아직도 기억하고 있습니다. 두 번째 명령은 checkout: moving from feature-login to main을(를) 찾습니다. 한 숫자 더 높은 항목(일치 항목이 HEAD@{5}인 경우 HEAD@{6})은 분기의 마지막 커밋입니다. 분기가 여전히 원격에 있으면 git branch feature-login origin/feature-login이 더 빠릅니다. 전체 브랜치 대신 하나의 커밋을 다시 가져오려면 체리픽으로 적용하세요.

떨어진 보관함을 복구하세요

git stash drop 및 git stash pop는 제거한 숨김 항목의 해시를 인쇄하고 git stash apply <hash>는 이를 다시 가져옵니다. 해시가 없으면 Git의 문서에서는 도달할 수 없는 숨김 커밋에 대한 검색을 제안합니다. 기본 "WIP on ..." 메시지와 함께 저장된 숨김을 찾습니다.

git stash apply 9d668e5
git fsck --unreachable | grep commit | cut -d' ' -f3 | xargs git log --merges --no-walk --grep=WIP --oneline

강제 푸시를 취소하는 방법

강제 푸시는 원격 브랜치를 사용자의 브랜치로 대체하므로 원격 브랜치에만 있던 커밋은 삭제됩니다. 원격 추적 분기도 리플로그를 유지합니다. origin/main@{1}는 마지막으로 본 푸시 이전의 원격 분기 위치이며 푸시 출력은 old...new의 전반부와 동일한 해시를 인쇄했습니다.

git reflog show origin/main
git push --force-with-lease origin 1a2b3c4:main

--force-with-lease는 마지막 가져온 이후 리모컨이 움직인 경우 푸시를 거부하므로 실수로 팀원의 수정 사항을 덮어쓸 수 없습니다. 가져오지 않은 커밋은 컴퓨터에 있는 적이 없습니다. 밀어낸 사람이 다시 밀어낼 수 있습니다. 그런 다음 그 사이에 끼어든 사람에게 말하세요. 푸시 실수 복구 영상에서는 전체 복구 과정을 보여줍니다.

GitTree에서 원클릭 실행 취소: 19가지 작업에 대한 복구 스냅샷

위의 모든 내용은 GitTree에서도 작동합니다. 설치된 Git(2.39 이상)을 실행하고 내장 터미널이 커밋 그래프 아래에 자체 셸을 엽니다. 추가 내용: GitTree는 19가지 작업에 대해 refs/ogt/trash 아래에 복구 스냅샷을 유지하여 파괴적인 단계가 실행되기 전에 제거할 수 있는 모든 것을 저장하고 도구 모음의 실행 취소 버튼을 사용하면 마지막 단계를 되돌립니다.

실행 취소에는 커밋 및 수정, 체크아웃, 재설정, 리베이스(대화형 파일도 포함), 삭제된 파일, 덩어리 및 줄, 삭제된 분기 및 태그, 추적되지 않는 파일 정리 등이 포함됩니다. GitTree에서 강제 재설정을 실행하는 경우 스냅샷에는 커밋되지 않은 변경 사항도 포함되며 일반 git reset --hard에서 다시 가져올 수 없습니다.

실행 취소 및 다시 실행은 GitTree 도구 모음에 있으며 그래프의 커밋 메뉴는 모든 커밋에 대한 재설정, 되돌리기 및 대화형 리베이스를 제공합니다.
실행 취소 및 다시 실행은 GitTree 도구 모음에 있으며 그래프의 커밋 메뉴는 모든 커밋에 대한 재설정, 되돌리기 및 대화형 리베이스를 제공합니다.

19개 중 2개는 반전되지 않고 그대로 유지됩니다. 강제 푸시는 리모콘을 변경하며, 다른 푸시만 다시 변경할 수 있으므로 GitTree는 교체된 팁을 유지하고 해당 푸시를 사용자에게 남겨둡니다(항상 --force-with-lease을 사용하여 강제 푸시합니다). 삭제된 스태시는 스냅샷을 찍지만 실행 취소로는 아직 복원하지 않습니다. GitTree는 또한 이후 작업을 덮어쓰는 실행 취소를 거부하고 그 이유를 설명합니다. 일반 푸시는 앱에서 실행 취소할 수 없습니다. 대신 되돌리세요.

Reset은 세 가지 모드로 명명됩니다. Soft는 모든 변경 사항을 단계적으로 유지하고, Mixed는 해당 변경 사항을 작업 폴더에 유지하며, Hard는 실행 취소가 복원할 수 있는 스냅샷 이후 해당 사항을 삭제합니다.
Reset은 세 가지 모드로 명명됩니다. Soft는 모든 변경 사항을 단계적으로 유지하고, Mixed는 해당 변경 사항을 작업 폴더에 유지하며, Hard는 실행 취소가 복원할 수 있는 스냅샷 이후 해당 사항을 삭제합니다.

GitTree에서 재설정, 리베이스 또는 삭제된 분기를 실행 취소하는 방법

  1. 평소처럼 일하세요

    평소처럼 브랜치를 재설정, 리베이스, 삭제 또는 삭제하세요. GitTree가 먼저 스냅샷을 찍습니다. 하드 리셋 대화 상자에 그렇게 나와 있습니다.

  2. 실행 취소를 클릭하세요

    도구 모음에서 실행 취소를 클릭하거나 명령 팔레트에서 실행합니다(Ctrl/⌘+Shift+P). 도구 설명에는 "실행 취소: 분기 기능 삭제-로그인"과 같은 단계 이름이 표시됩니다. 취소할 수 없는 단계는 그 이유를 보여줍니다.

  3. reflog를 사용하여 더 뒤로 이동

    실행 취소는 GitTree 자체적으로 실행된 내용을 다룹니다. 터미널에 입력된 명령의 경우 팔레트에서 View Reflog…를 실행하고 항목을 선택한 다음 Restore as Branch를 선택합니다.

  4. 푸시하기 전에 그래프를 확인하세요

    커밋 그래프는 브랜치를 원래 위치로 되돌려 표시하므로 컴퓨터를 떠나기 전에 결과를 확인할 수 있습니다.

모든 Git 실수를 되돌릴 수 있게 유지하는 습관

  • 조기, 심지어 지저분하게 커밋합니다. 커밋된 작업만 리프로그에 도달합니다. 나중에 대화형 리베이스로 정리하세요.
  • 위험한 편집 이전에 분기합니다. git branch backup/before-rebase은(는) 비용이 들지 않으며 만료되지 않습니다.
  • 일반 `--force`을(를) 사용하지 마세요. --force-with-lease는 보지 못한 커밋을 덮어쓰지 않습니다.
  • 공유 기록을 되돌리고 비공개 기록을 재설정하세요. 다른 사람이 커밋을 가져오면 되돌리세요.
  • Git을 최신 상태로 유지하세요. GitTree에는 Git 2.39 이상이 필요하고 Ubuntu 22.04에서는 2.34가 제공됩니다. Ubuntu에서 Git을 업그레이드하는 방법을 참조하세요.

아직도 입력과 클릭 중 하나를 선택하고 계십니까? Git GUI와 명령줄 비교를 읽거나 초보자를 위한 GUI 포함 Git으로 시작하세요.

GitTree에는 macOS 13 이상, Windows 10 및 11(x64) 및 64비트 Linux(x86_64: Ubuntu 22.04+, Debian 12+)에 포함된 비공개 저장소를 포함한 모든 Git 기능을 포함하는 무료 계획이 있으며, AI 도우미인 Nour에는 GitTree Pro(참조 가격). 로그인하려면 Git 2.39 이상 및 GitTree 계정이 필요합니다. 다운로드 페이지에서 다운로드하거나 Linux에서 어떻게 실행되는지 확인하세요.

자주 묻는 질문

git Reset --hard를 어떻게 실행 취소하나요?

git reflog을 실행하고 reset: moving to … 바로 아래 줄을 찾으세요. 거기가 당신의 지점이 있던 곳이에요. 재설정이 마지막 명령인 경우 git reset --hard HEAD@{1}는 삭제된 커밋을 다시 가져옵니다. 커밋하지 않은 변경 사항은 reflog에 없으므로 Git은 이를 복원할 수 없습니다. GitTree에서 하드 리셋을 실행한 경우 실행 취소는 먼저 찍은 스냅샷에서 복원합니다.

마지막 커밋을 취소하고 변경 사항을 유지하려면 어떻게 해야 합니까?

변경 사항을 스테이징된 상태로 유지하려면 git reset --soft HEAD~1를 실행하고, 작업 폴더에 스테이징되지 않은 상태로 유지하려면 git reset HEAD~1를 실행하세요. 둘 다 로컬 브랜치만 다시 작성하므로 푸시하지 않은 커밋에 사용하세요. 푸시된 커밋의 경우 취소하는 커밋을 추가하는 git revert HEAD를 실행합니다.

git rebase가 완료된 후 어떻게 취소합니까?

리베이스 직후 git reset --hard ORIG_HEAD는 분기를 이전 팁으로 반환합니다. 그 이후로 다른 명령을 실행했다면 git reset --hard <branch>@{1}을 사용하세요. 리베이스는 완료 시 분기를 한 번만 이동합니다. 리베이스 브랜치를 푸시한 경우 --force-with-lease를 사용하여 복원된 브랜치를 푸시하세요.

git reflog는 손실된 커밋을 얼마나 오랫동안 유지합니까?

더 이상 분기에 도달하지 않는 손실된 커밋은 기본적으로 30일 동안 해당 리프로그 항목을 유지합니다. 지난 90일 동안 브랜치에 남아 있는 커밋 항목입니다. 항목이 존재하는 동안 가비지 수집은 커밋을 유지합니다. 커밋을 무기한 유지하려면 브랜치나 태그(예: git branch rescue <hash>)를 추가하세요. Git은 브랜치 지점의 커밋을 삭제하지 않기 때문입니다.

git Reset --hard 이후에 커밋되지 않은 변경 사항을 복구할 수 있나요?

일반적으로 Git만으로는 그렇지 않습니다. 리플로그 기록은 작업 폴더의 편집 내용이 아닌 커밋을 기록하므로 편집자의 로컬 기록을 확인하세요. 준비된 파일은 파일 이름 없이 git fsck --lost-found이 .git/lost-found/other/에 쓰는 매달린 개체로 남아 있을 수 있습니다. GitTree는 자체 하드 리셋 전에 커밋되지 않은 변경 사항의 스냅샷을 찍습니다.

강제 푸시를 어떻게 취소하나요?

교체한 원격 팁을 찾으세요. git reflog show origin/main는 이를 origin/main@{1}로 나열하고 푸시 출력에서는 이를 old...new의 첫 번째 해시로 표시합니다. 그런 다음 git push --force-with-lease origin <hash>:main을(를) 실행하세요. 푸시가 가져오지 않은 커밋을 덮어썼다면 푸시한 사람에게 다시 푸시하도록 요청하세요.

GitTree git push를 취소할 수 있나요?

아니요. 일반적인 푸시는 GitTree에서 취소할 수 없습니다. 대신 커밋을 되돌리세요. 강제 푸시의 경우 GitTree는 교체된 원격 팁을 복구 스냅샷에 유지하므로 아무것도 손실되지 않지만 원격을 복원하려면 또 다른 푸시가 필요합니다. 실행 취소에는 커밋, 재설정, 리베이스, 체크아웃 및 분기 삭제와 같은 로컬 작업이 포함됩니다.

git reflog가 내 팀과 공유되나요?

아니요. 재로그는 로컬 .git 폴더에만 있습니다. 푸시되지 않으며, 가져오기는 다른 사람의 것을 가져오지 않으며, 새로운 클론은 빈 클론으로 시작됩니다. 따라서 팀원의 잃어버린 커밋은 자신의 컴퓨터에서만 복구할 수 있으며, 누군가가 원격 브랜치를 덮어쓰더라도 리프로그는 커밋을 유지합니다.

출처

다른 제품에 대한 주장은 2026년 10월 23일의 공식 페이지에서 확인되었습니다. 가격과 기능은 변경됩니다. 공급업체 페이지가 진실의 원천입니다.