"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 --help
및 git 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
'development' 카테고리의 다른 글
두 줄을 어떻게 연결할 수 있습니까? (0) | 2020.02.29 |
---|---|
페이지로드시 AngularJS 컨트롤러 기능을 실행하는 방법은 무엇입니까? (0) | 2020.02.29 |
ExecutorService를 사용하여 모든 스레드가 완료되기를 기다리는 방법은 무엇입니까? (0) | 2020.02.29 |
도커 이미지를 개인 저장소로 푸시하는 방법 (0) | 2020.02.29 |
PostgreSQL : "postgres"사용자의 비밀번호 인증에 실패했습니다 (0) | 2020.02.29 |