development

"git rm -r"을 되 돌리는 방법?

big-blog 2020. 2. 29. 15:26
반응형

"git rm -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-rm'd하고 그 파일 중 일부가 다시 필요하다는 것을 알았을 때 다음 커밋 전에 변경을 계속했습니다. 숨김 및 재설정 대신 원하는 경우 누락 / 제거 된 개별 파일을 간단히 체크 아웃 할 수 있습니다.

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 --helpgit checkout --help자세한 내용은.


최신 정보:

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

트릭을 수행하고 파일에 대한 커밋되지 않은 변경 사항은 지우지 않습니다 .

그 후에 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 rm 실행 취소

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

git rm -r 실행 취소

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

git rm -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 checkout <branch>@{"20 minutes ago"} <filename>

리스트 커밋 받기

git log  --oneline

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

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

나는 같은 상황이 있었다. 내 경우에는 해결책은 다음과 같습니다.

git checkout -- .

폴더를 정리하고 파일을 정리하고 이동하는 것과 똑같은 문제가있었습니다. git rm 입력했습니다 . Enter 키를 누르십시오. 그리고 내 장이 약간 느슨해 졌다고 느꼈습니다. 운 좋게도 git commit -m ""을 직접 입력하지 않았습니다.

그러나 다음 명령

git checkout .

모든 것을 복원하고 내 생명을 구했습니다.

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



반응형