IT박스

삭제 된 파일을 복원 할 수 있습니까 (`git clean -fdx` 실행 취소)?

itboxs 2020. 8. 7. 08:10
반응형

삭제 된 파일을 복원 할 수 있습니까 (`git clean -fdx` 실행 취소)?


나는 github 페이지 만들기에 대한 지침을 따르고 있었고 내 git 하위 디렉토리로 이동하는 것을 잊었습니다. 결과적으로 git clean -fdx.
이 끔찍한 실수를 되돌릴 수있는 방법이 있습니까?


아니요. 그 파일은 사라졌습니다.

(Linux에서 확인 : git clean callsunlink() , 미리 백업하지 않습니다.)


git clean -fdxn

테스트 실행을 수행하고 실행 하면 어떤 파일이 삭제되는지 보여줍니다.

git clean -fdx

(물론 이것은 당신이 이것을 미리 아는 경우에만 도움이되지만 다음 번에)


아니요. "git clean -fdx"는 git이 작업 디렉토리에서 추적하지 않는 모든 파일과 디렉토리를 삭제합니다. Git은 이러한 파일을 추적하지 않기 때문에 이러한 파일의 백업이 없습니다. 적어도 보통은 아닙니다.

비교적 최근에 이러한 파일 중 하나에 'git add'를 수행 한 경우 (그러나 커밋을 중단 한 경우) 'git fsck --lost-found'를 사용하여 찾을 수 있습니다. 시도해 볼 가치가 있지만 너무 기대하지 마십시오.

미래에 당신은 너무 드물게 몇 번보다는 너무 자주 몇 번 커밋하는 것을 고려해야합니다. 이렇게하면 이러한 커밋을 원격으로 푸시하지 않더라도 최소한 로컬 백업이있을 수 있습니다.


IntelliJ / Android Studio를 사용하면 로컬 기록에서 파일을 복원 할 수 있습니다 .


오늘이 문제가있었습니다.

다른 사람들이 말했듯이 git은 파일을 보관하지 않습니다.

이를 실행 취소하는 유일한 방법은 삭제 취소 유틸리티를 사용하는 것입니다. "extundelete"를 사용하여 모든 것을 복구했지만 마일리지 / 파일 시스템이 다를 수 있습니다.


위에서 언급 한 @kusma처럼 좋다면 ( "git add"를 한 적이 있다면) 다음을 사용하여 전체 객체를 추출 할 수 있습니다.

git fsck | awk '{print $3}' | xargs git show | tee searchresults.log

이렇게하면 모든 유형의 청크를 찾고, 전체 diff를 수집하고 손실 된 파일을 추출 할 수있는 파일에 추가합니다. 제 경우에는 전체 Java 클래스를 잃었습니다.


Eclipse에서 작업하는 경우 가능한 솔루션 중 하나는 Eclipse의 로컬 히스토리에서 복원하는 것입니다.


실제로 ! 이것은 가능하다! 그러나 git 명령을 사용하지 않습니다. Recuva
와 같은 파일 복구 도구 만 있으면 됩니다.
삭제 된 경로를 언급하고 파일을 복구하도록합니다.

또한 다음은 해당 앱 사용에 대한 몇 가지 유용한 정보입니다.

  1. 파일을 복원하기 전에이 확인란을 선택하는 것이 좋습니다 (삭제 된 파일이 복구 창에 나타날 때) :
    Advanced Mode-> Options-> Actions-> Restore folder structure
    이렇게하면 폴더 구조를 유지하여 모든 파일이 복구되므로 훨씬 쉬워집니다. 해당 폴더를 삭제 된 경로로 끌어다 놓기 만하면됩니다.
  2. USB 장치에 복구 도구를 설치하는 것이 훨씬 바람직합니다 (아래 경고 때문에).
  3. 파일을 복원 할 위치를 언급하는 동안 현재 복구 된 파일이 아직 복구되지 않은 다른 삭제 된 파일을 덮어 쓸 수 있으므로 파일이 삭제 된 위치에서 동일한 드라이브를 선택 하지 마십시오 (아래에서 언급 한 경고 때문에 다시). USB 드라이브에 파일을 복구하는 것은 항상 좋은 해결책입니다.

경고! 파일을 잃어 버리면 (실수로 삭제), 성공적으로 복구 할 가능성을 높이기 위해 삭제 된 드라이브를 건드리지 마십시오 (파일 추가 / 편집). 그렇지 않으면 해당 파일이 완전히 손실 될 수 있습니다.

작동 이유 : 파일을 삭제해도 실제로는 삭제되지 않습니다. "삭제됨"으로 표시 되기만하므로 다음에 동일한 드라이브에 파일을 추가 / 업데이트 할 때 이전 파일을 새 파일로 덮어 씁니다. 그러나 덮어 쓰기 전까지는 여전히 파일을 읽고 복구 할 수 있습니다.


Jetbrains IDE를 사용하는 경우 파일의 로컬 기록을 볼 수있는 옵션이 있습니다. 을 완료 한 경우 git clean파일을 다시 생성하고 파일의 로컬 기록을 확인하고 거기에서 복원 할 수 있습니다.

단일 파일을 위해 나를 위해 일했습니다. 완전한 디렉토리를 위해 나는 그것을하는 방법을 전혀 모른다.


MSBuild와 함께 git을 사용하는 경우 모든 파일을 복사 한 다음 git clean -xdf. 이렇게하면 삭제하고 싶지 않은 항목을 삭제했음을 알게 된 경우 파일을 쉽게 복원 할 수 있습니다. 여기를보십시오 : http://blog.3d-logic.com/2012/11/04/safe-git-clean-with-msbuild/


다행히 Windows 7을 사용하는 동안이 실수를 저질렀습니다. 휴지통으로 이동하여 삭제 된 모든 파일을 강조 표시하고 "복원"을 클릭했습니다. 끝난.


내 저장소에 추가해야하는 코드로 작업했고 -dfx로 정리하여 파일을 복원 할 수있었습니다.

나는 debugfs, look and link from inodes, testdisk 및 나타나는 많은 다른 도구를 사용하려고 시도했지만이 어리석은 사람이 실수로 지운 디렉토리를 찾지 못했습니다.

sourceforge에서 extundelete다운로드합니다 . e2fslibs-dev 패키지
를 설치해야 할 것입니다. 실행

$ ./configure 
$ make 

src 폴더 안에 extundelete 바이너리를 생성합니다. 제 경우에는 폴더를 잘못 지 웠습니다. 그것을 FOOBAR이라고 부르 자

방금 실행했습니다.

$  sudo ./extundelete --restore-directory <full path to FOOBAR > <the partition> 


RESTORED_FOLDERS라는 폴더를 만들었습니다.


변경 사항을 푸시하지 않은 경우 (git push) 아직 업데이트되지 않은 서버의 정보를 다시 가져올 수도 있습니다. filezilla를 사용하여 삭제 한 파일을 다시 가져 와서 로컬 파일에 복사했습니다. 최선의 방법은 아니지만 콘솔 사용을 피하고 작동합니다.

참고 URL : https://stackoverflow.com/questions/6267180/can-i-restore-deleted-files-undo-a-git-clean-fdx

반응형