?에서 작업 디렉토리에 대한 커밋되지 않은 변경 사항을 복구 할 수있는 방법이 git reset --hard HEAD
있습니까?
git reset --hard somewhere
실제로 위험한 git 명령 중 하나입니다.
?에서 작업 디렉토리에 대한 커밋되지 않은 변경 사항을 복구 할 수있는 방법이 git reset --hard HEAD
있습니까?
git reset --hard somewhere
실제로 위험한 git 명령 중 하나입니다.
답변:
당신은 할 수 일반적으로 커밋되지 않은 변경 내용을 다시 얻을.
이전에 준비된 변경 사항 ( git add
)은 인덱스 객체에서 복구 할 수 있어야하므로 git fsck --lost-found
관련 개체를 찾는 데 사용 하십시오. (이것은 객체를 .git/lost-found/
디렉토리에 씁니다 . 거기 git show <filename>
에서 각 파일의 내용을 볼 수 있습니다 .)
그렇지 않은 경우 여기에 대한 대답은 백업을보십시오. 아마도 편집기 / IDE는 임시 사본 을 / tmp 또는 C : \ TEMP 아래에 저장 합니다. [1]
git reset HEAD@{1}
이것은 이전 HEAD로 복원됩니다
[1] vim은 예를 들어 선택적으로 영구 실행 취소를 저장하고 Eclipse IDE는 로컬 히스토리를 저장합니다 . 이러한 기능을 사용하면 a **
이에서 답변 SO
$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}
203e84e HEAD@{1}: reset: moving to HEAD@{1}
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug
# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}
당신은 하루를 되찾았습니다! :)
git checkout HEAD@{19}
하면 분리 된 상태에서 손실 된 파일을 확인할 수 있습니다. 그런 다음 git checkout -b new-branch-name
"연결된"상태로 저장소에 다시 추가하는 데 사용 됩니다.
git checkout -b new-branch-name
. Git을 사용하는 Pragmatic Version Control 책 은 Git을 간단한 용어로 설명하는 데 능숙합니다.
git reset --hard
오늘도 커밋되지 않은 변경 사항을 적용하면서 실수로 오늘 리포지토리를 실행 했습니다. 그것을 다시 얻기 위해, 나는 git fsck --lost-found
참조되지 않은 모든 blob을 썼습니다 <path to repo>/.git/lost-found/
. 파일이 커밋되지 않았기 때문에의 other
디렉토리에 있습니다 <path to repo>/.git/lost-found/
. 여기에서를 사용하여 커밋되지 않은 파일을 확인 git show <filename>
하고 블롭을 복사 한 다음 이름을 바꿀 수 있습니다.
참고 :이 기능은 색인에 저장하려는 파일을 추가 한 경우에만 작동합니다 (을 사용하여 git add .
). 파일이 색인에 없으면 손실됩니다.
lost-found
. 그러나 나는 git show
내용을 얻기 위해 할 수 있었다 .
#!/bin/bash cd PATH_TO_PROJECT/.git/lost-found/other FILES=* COUNTER = 0 for f in $FILES do echo "Processing $f file..." git show $f > "PATH_TO_RECOVERY_DIRECTORY/$COUNTER.m" let COUNTER=COUNTER+1 done
예, git 의 하드 리셋 에서 복구 할 수 있습니다 .
사용하다:
git reflog
커밋의 식별자를 가져옵니다. 그런 다음 사용하십시오.
git reset --hard <commit-id-retrieved-using-reflog>
이 속임수는 내 인생을 두 번 구했습니다.
reflog 문서는 여기에서 찾을 수 있습니다 .
git reset --hard
다른 것을 사용하여 복구하는 것은 반 직관적 인 것처럼 보이지만 스위치를 git reset --hard
사용하지 않으면 --hard
작업 공간에 항목이 남아있어 방금 복구 한 작업을 효과적으로 되돌릴 수 있습니다.
git log
커밋의 ID를 보지 못했습니다. 함께 git reflog
내가 볼 수는 ID 커밋
로컬 프로젝트를 진행하는 동안 GitHub로 옮기고 새로운 리포지토리를 만들고 싶었습니다. gitgitore를 사용하여 이러한 모든 파일을 새 저장소에 추가하려고 시도하는 중에 실수로 잘못된 파일을 추가 한 후 지우려고했습니다.
나는 달렸다 git reset --hard origin/master
: P
그런 다음 저장소가 비어 있기 때문에 모든 로컬 파일이 삭제되었습니다. 나는 모든 것이 사라 졌다고 생각했다.
이것은 내 생명을 구했습니다 :
git reflog show
git reset HEAD@{1}
git push
그것이 다른 생명을 구하기를 바랍니다.
git reset HEAD@\{27\}
감사합니다!
git reflog show
확인하고 사용 하는 첫 번째 커밋에서git reset HEAD@{number}
IntelliJ와 같은 것을 사용하는 경우 :
상황에 맞는 메뉴에서 로컬 기록을 선택하고 하위 메뉴에서 기록 표시를 클릭하십시오.
프로젝트 또는 폴더의 로컬 히스토리보기에는 지난 며칠 동안 수행 한 모든 것이 표시됩니다. 대화 상자 아래쪽의 동작 열에서 롤백 할 동작을 선택합니다. [...] 이렇게하면 대화 상자의 상단에 변경된 파일의 트리보기가 표시됩니다. 이후에 수행 된 다른 변경 사항에 관계없이 삭제 된 파일 만 복원하려면 트리보기에서 Lost.txt 파일을 선택하고 되돌리기 버튼을 클릭하십시오.
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
방금 내 엉덩이에 불이 났어!
git reflog
변경 사항을 커밋하지 않아 작동하지 않았습니다. git fsck --lost-found
준비된 파일에서 작동했지만 모두 준비된 것은 아닙니다. IntelliJ의 로컬 히스토리는 저장되지 않은 파일을 완벽하게 복구했습니다.이 기능에 매우 감사합니다
난 그냥 한 git reset --hard
내 모든 커밋되지 않은 변경을 잃었다. 운 좋게도 편집기 (IntelliJ)를 사용하고 로컬 히스토리에서 변경 사항을 복구 할 수있었습니다. Eclipse는 동일한 작업을 수행 할 수 있어야합니다.
정의에 따라 git reset --hard
에 따라 Git이 복구 할 수있는 방법없이 커밋되지 않은 변경 사항을 버립니다 (백업 시스템은 도움이 될 수 있지만 Git은 도움이되지 않음).
실제로 git reset --hard
좋은 아이디어가있는 경우는 거의 없습니다 . 대부분의 경우 동일한 작업을 수행하는 더 안전한 명령이 있습니다.
커밋되지 않은 변경 사항을 삭제하려면을 사용하십시오 git stash
. 이 변경 사항의 백업을 유지하며 실행하면 일정 시간이 지나면 만료됩니다 git gc
. 99.9 % 확신 할 경우 이러한 변경 사항이 다시는 필요하지 않으며 git stash
여전히 0.1 % 사례의 친구입니다. 100 % 확실하다면 100 % git stash
측정 오류가 있기 때문에 여전히 친구입니다. ;-).
당신 HEAD
과 역사의 현재 지점의 끝 을 움직이고 싶다면 git reset --keep
친구입니다. 와 같은 작업을 수행 git reset --hard
하지만 로컬 변경 사항 은 삭제 하지 않습니다 .
둘 다하고 싶다면 git stash && git reset --keep
친구입니다.
손가락을 사용하지 말라고 가르치면 git reset --hard
하루를 상환합니다.
git stash && git reset --hard
숨겨둔 내용을 지우는 것이 맞습니까?
git reset --hard
숨김을 버리지 않습니다. git stash
작업 트리 git reset --hard
에서 커밋되지 않은 변경 사항을 영구적으로 버리지 않고 안전하게 유지한다는 점을 제외하고 작업 트리에서 변경 사항을 제거한다는 의미에서 대체입니다 .
실수로 커밋을 재설정 한 경우이 작업을 수행하십시오.
git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case
가정하고 HEAD@{2}
싶은 상태는
이것이 내가 약간의 변화를 잃을 때 내가 일반적으로하는 일입니다.
git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...
포인터를 이전 커밋으로 다시 이동하지만 최신 커밋 확인에서 지금까지 변경 한 내용은 유지 git reset --soft dadada
정보가 손실됩니다.
커밋하지 않았으므로 .git 은이 정보를 저장하지 않았습니다. 따라서 기본적으로 git
복구 할 수 없습니다.
그러나 방금 수행 git diff
한 경우 다음 3 가지 간단한 단계로 터미널 출력을 사용하여 복구 할 수있는 방법이 있습니다.
git diff
. diff.patch라는 파일에 o / p를 저장하십시오.patch -p1 < diff.patch
)를 적용하십시오당신은 저장되었습니다! :)
참고 : 터미널에서 파일로 데이터를 복사하는 동안 데이터가 연속 출력이고 중복 데이터가 포함되어 있지 않은지 (위쪽 및 아래쪽 화살표로 인해)주의하고 명확하게 확인하십시오. 그렇지 않으면 엉망이 될 수 있습니다.
나는 같은 문제에 부딪 쳤고 거의 미쳤다. ... 처음에는 프로젝트를 커밋하고 병합했다 .. 나중에 실행하려고 할 git push --set-upstream origin master
때이 오류가 발생했습니다.
fatal: refusing to merge unrelated histories
그래서 나는 달렸고 git reset --hard HEAD
3 주 프로젝트를 삭제했지만 아래의 몇 가지 명령은 하루를 저장합니다.
git reset HEAD@{1} //this command unstage changes after reset
git fsck --lost-found //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
도움이 되었기를 바랍니다
를 한 후에 커밋을 되돌릴 수 있습니다 reset --hard HEAD
.
활용 "git reflog
"를HEAD
하여 지점 의 기록을 확인하십시오 .
커밋과 ID가 여기에 표시됩니다.
할
git reset {commit Id of the commit you want to bring back}
git reset HEAD@{4}
4는 4 단계 전에 변경되었습니다. 올바른 단계를 선택하면 하드에서 제거한 파일 목록이 표시됩니다. 그런 다음 수행하십시오.
$ git reflog show
이미 생성 한 로컬 커밋 기록을 보여줍니다. 지금 :
$ git reset --hard 8c4d112
8c4d112는 하드를 재설정하려는 코드입니다. 자세한 정보 는 https://www.theserverside.com/video/How-to-use-the-git-reset-hard-command-to-change-a-commit-history 를 참조하십시오.
올바른 답. 좋아, 이제 자식을 좋아한다. :-) 여기 간단한 레시피가 있습니다.
git log HEAD@{2}
git reset --hard HEAD@{2}
여기서 "2"는 변경 사항을 커밋 한 위치의 수입니다. 필자의 경우, 빌드 문제를 디버그하기 위해 동료와 상사에 의해 중단되었습니다. 그래서 리셋을 두 번했습니다. 따라서 HEAD와 HEAD @ {1}은 (는) 덮어 쓰기되었습니다. 휴, 우리의 노력을 잃었을 것입니다.
( 일부 사용자에게 적합한 답변 )
(최근의) macOS를 사용 중이고 Time Machine 디스크를 사용하지 않더라도 OS는 로컬 스냅 샷 이라는 시간별 백업을 저장합니다 .
Time Machine을 입력하고 손실 된 파일로 이동하십시오. 그런 다음 OS에서 다음을 묻습니다.
The location to which you're restoring "file.ext" already contains an
item with the same name. Do you want to replace it with the one you're
restoring?
잃어버린 파일을 복구 할 수 있어야합니다.
동일한 코드로 IDE를 연 경우 변경 한 각 개별 파일에 대해 ctrl + z를 수행하십시오. git reset --hard를 수행 한 후 커밋되지 않은 변경 사항을 복구하는 데 도움이되었습니다.
git reset
합니다. 해당 명령이 필요하지 않으며 위험하므로 사용하지 마십시오. 분기를 이전 커밋으로 되돌리고git rebase -i
원하지 않는 커밋을 삭제하거나git checkout
(머리를 분리)git branch -M
분기 팁을 이동하십시오. 첫 번째는 로컬 변경으로 실행을 거부하고 나중에는 로컬로 수정 된 파일이 수정본간에 다르지 않은 경우에만 실행됩니다.