programing

"gitrm -r"을 되돌리는 방법?

showcode 2023. 5. 20. 11:00
반응형

"gitrm -r"을 되돌리는 방법?

내가 실수로 말했습니다.git rm -r .어떻게 하면 이 상태를 회복할 수 있습니까?

저는 저지르지 않았습니다.

모든 파일이 삭제 표시되어 있고 로컬 체크아웃에서도 물리적으로 제거된 것 같습니다.

편집: (명령을 알고 있다면) 마지막 커밋으로 되돌릴 수 있습니다.하지만 제가 그 일을 취소할 수 있다면 훨씬 더 좋을 것입니다.git rm -r .왜냐하면 나는 내가 마지막 커밋 이후와 그 이전에 무엇을 했는지 정말로 확신할 수 없기 때문입니다.git rm -r ..

git reset HEAD

해야 돼요.중요한 커밋되지 않은 변경사항이 없는 경우

git reset --hard HEAD

마지막 커밋으로 모든 것을 강제로 재설정해야 합니다. 않은 변경사항이 첫 변경사항을 커되않변있이첫다지저작니로 합니다.git stash:

git stash
git reset --hard HEAD
git stash pop

몇 개의 파일을 저장하고 다음 커밋 전에 변경 작업을 계속했습니다. 이 파일들 중 일부가 다시 필요하다는 것을 깨달았을 때 말이죠.다음과 같은 경우에는 저장 및 재설정하는 대신 누락/제거한 개별 파일을 간단히 확인할 수 있습니다.

git checkout HEAD path/to/file path/to/another_file

이렇게 하면 커밋되지 않은 다른 변경 사항은 해결 방법 없이 그대로 유지됩니다.

일부 단일 파일 또는 폴더를 복구하려면 다음을 사용합니다.

git reset -- path/to/file
git checkout -- path/to/file

먼다음대인항다만다듭니시목을저덱에 대한 됩니다.path/to/file파일을 마지막 커밋에서와 같이 다시 만듭니다.HEAD.

힌트: 두 명령 모두에 커밋 해시를 전달하여 이전 커밋에서 파일을 재생성할 수 있습니다.git reset --help그리고.git checkout --help상세한 것은

ungitrm

git rm file             # delete file & update index
git checkout HEAD file  # restore file & index from HEAD

gitrm -r 실행 취소

git rm -r dir          # delete tracked files in dir & update index
git checkout HEAD dir  # restore file & index from HEAD

gitrm -rf 실행 취소

git rm -r dir          # delete tracked files & delete uncommitted changes
not possible           # `uncommitted changes` can not be restored.

Uncommitted changes를 포함합니다.not staged changes,staged changes but not committed.

업데이트:

때부터git rm .에서는 인덱스뿐 아니라 작업 중인 체크아웃의 이 디렉터리 및 하위 디렉터리에 있는 모든 파일을 삭제하므로 다음과 같은 각 변경 사항을 실행 취소해야 합니다.

git reset HEAD . # This undoes the index changes
git checkout .   # This checks out files in this and child directories from the HEAD

이것은 당신이 원하는 것을 해야 합니다.체크아웃된 코드 또는 색인의 상위 폴더에는 영향을 주지 않습니다.


그렇지 않은 오래된 대답:

reset HEAD

그러면 파일에 대한 커밋되지 않은 변경 내용이 지워지지 않습니다.

은 어떤 것이든 에▁any합다니▁repeat▁to▁after▁need▁that야▁you반해복그를 반복해야 합니다.git add사용자가 대기열에 올린 명령입니다.

위의 항목 중 하나도 작동하지 않는 경우 http://www.spinics.net/lists/git/msg62499.html 의 제안을 사용하여 데이터를 검색할 수 있습니다.

git prune -n
git cat-file -p <blob #>

변경 내용을 커밋하고 푸시한 경우 이 작업을 수행하여 파일을 다시 가져올 수 있습니다.

// Replace 2 with the # of commits back before the file was deleted.
git checkout HEAD~2 path/to/file

이미 몇 가지 좋은 답변이 있지만, 잘 작동할 뿐만 아니라 원하는 것에 매우 명시적인(무섭거나 신비롭지 않기 때문에) 약간 사용되는 구문을 제안할 수 있습니다.

git checkout <branch>@{"20 minutes ago"} <filename>

목록 커밋 가져오기

git log  --oneline

예를 들어 안정적 커밋에는 해시가 있습니다.45ff319c360cd7bd5442c0fbbe14202d20ccdf81

git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master

Git 2.23+(2019년 8월)에서는 파일(및 인덱스)을 복원하는 적절한 명령을 사용해야 합니다.git restore (아닙니다.reset --hard또는 혼란스러운 명령)

즉, 다음과 같습니다.

git restore -s=HEAD --staged --worktree -- .

또는 약어 형태:

git restore -s@ -SW -- .

명령을 실행하는 경우git rm -r --cached .스테이징되지 않은(커밋되지 않은) 변경 사항이 있는 리포에서 명령을 사용하여 작업(삭제에서 삭제)을 실행 취소할 수 있습니다.git restore --staged .

그래서 간단히 말해서, 취소하는 것은 git rm -r --cached .당신은 달리기만 하면 됩니다.git restore --staged .

저도 똑같은 상황이 있었습니다.저의 경우 해결책은 다음과 같습니다.

git checkout -- .

저도 똑같은 문제가 있었습니다. 폴더 정리, 파일 재배열 및 이동이었습니다.저는 들어갔습니다. gitrm. 그리고 엔터를 누릅니다. 그리고 나서 제 장이 조금 느슨해지는 것을 느꼈습니다.운 좋게도, 저는 git commit -m "를 바로 입력하지 않았습니다.

그러나 다음 명령은

git checkout .

모든 것을 복구하고, 제 목숨을 구했습니다.

언급URL : https://stackoverflow.com/questions/2125710/how-to-revert-a-git-rm-r

반응형