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


119

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


2
나는 확실하지 않지만 git에서는 가능하지 않다고 생각합니다. 그러나 파일 시스템의 삭제 취소 유틸리티가 트릭을 수행 할 수 있습니다.
static_rtti 2011-06-07

9
흥미롭게도 Git Community Bookgit clean -fdx작업이 너무 위험하다는 경고 없이도 제안 합니다. 이 겉보기에 결백 해 보이는 제안으로 얼마나 많은 사람들이 자신의 파일을 돌이킬 수없이 파괴했는지 궁금합니다.
catpnosis

5
IDE에 Eclipse 또는 IntelliJ IDE와 같은 "로컬 히스토리"가 있는지 확인하십시오. 이는 부주의 한 git clean전화에 대한 많은 상심을 덜어 줄 수 있습니다 . 또한 점검하지 않고 청소 습관에서 벗어나도록 노력하십시오. 엄청나게 파괴적인 정리 git clean -fdxn를 실제로 실행하기 전에 확인 프롬프트와 함께 실행할 Powershell 또는 Bash 스크립트를 만듭니다 .
조쉬 시민

답변:


129

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

(Linux에서 확인 : git clean callsunlink() , 사전에 백업하지 않음)


32
RubyMine, Eclipse 등과 같은 고급 IDE를 사용하는 경우 삭제 된 파일의 로컬 기록이 있고 복구 할 수 있습니다.
Usman

1
내 경우 @Usman git clean은 실수로 .idea숨겨진 폴더 내의 보류 변경 사항을 삭제 했으며 로컬 기록이 나를 구했습니다!
emkman

2
@Usman의 훌륭한 팁. Eclipse를 사용하면 "Restore from Local History ..."옵션을 사용하여 파일을 다시 가져올 수 있습니다. i.imgur.com/XWNLOk5.gifv
brandizzi

1
실제로 이것은 가능하지만 해키 방법입니다. 이 대답을 참조하십시오 stackoverflow.com/questions/6267180/can-i-undo-a-git-clean-fdx/...
그냥 그림자

4
PyCharm에서 복원 할 수도 있습니다. 파일이있는 폴더를 마우스 오른쪽 버튼으로 클릭하고 로컬 기록을 클릭 한 다음 삭제를 찾은 다음 되돌리기를 클릭합니다.
Juanjo 콘티

48
git clean -fdxn

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

git clean -fdx

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


7
여기에 추가하려면 -n대부분의 git 명령 (및 기타 여러 * nix 명령)에서 작동합니다.
Nick McCurdy 2013

23

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


3
PyCharm도이를 지원합니다! 이 답변에 감사드립니다. 나는 상위 3 위가 "운이 없어서 미안하지 않다"고 답한 후 나머지 답변을 읽은 것에 너무 기쁩니다.
Bryson

18

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

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

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


진짜 문제는 디렉토리가 저장소가 될 수 없다는 것입니다. 로그 다시 찾고, 나는 밖으로 회전은 후 새의 repo 디렉토리에 CD를 잊고 mkdir그것을 -ing
에릭

1
이 질문을 읽은 직후 삭제 된 각 파일을 백업하기 위해 구성 변수를 추가하는 패치를 Git에 작성했습니다. 다른 사람들에게 유용 할 수 있습니까? github.com/kusma/git/tree/work/clean-backup
kusma

1
오늘은 운이 좋았어요 !!! "git fsck --lost-found"덕분입니다. 모든 변경 사항을 가져 오기 위해 다음을 사용했습니다. git fsck | awk '{print $ 3}'| xargs 자식 쇼 | tee searchresults.log 추가 한 후 제거한 전체 파일을 원했기 때문에 로그에서 가져올 수 있습니다. :)
Marcello de Sales

11

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

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

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


8

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

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


동일한 파일 이름으로 동일한 위치에 파일을 만듭니다. IDE에서 마우스 오른쪽 버튼을 클릭하고 "기록 표시"를 클릭합니다. 내용을 복사하여 붙여 넣으십시오. @Rajesh의 훌륭한 조언. 감사.
deep

1
나는 구원 받았다. 감사합니다.
스콧

파일 내용을 복사 할 필요없이 파일을 마우스 오른쪽 버튼으로 클릭 한 다음 '되돌리기'를 클릭하여 해당 버전으로 다시 복원합니다 (삭제 한 경우에도)
n00b

7

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

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

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


7

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


2
PyCharm과 지역의 역사를 사용하여 메신저 나 저장
psychok7

1
IntelliJ IDEA에서도 마찬가지입니다!
arthurakay 2015 년

RubyMine에는 지역 역사도 있습니다. 나를 구했다!
Usman

모든 IntelliJ 브라우저에는 로컬 기록이 있습니다. 고맙게도. 나는 WebStorm을 사용하고 있었고 그것을 발견하기 전에 막 동맥류가있었습니다. 3 일 분량의 12 시간 근무일이 지났고, 저는 책상에서 독주 한 병을 진지하게 고려했습니다.
조쉬 시민

7

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

또한 다음은 해당 앱 사용에 대한 몇 가지 유용한 참고 사항입니다.

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

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

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


1
내 생명을 구 해주셔서 감사합니다. 모든 것을 복구 할 수 없기 때문에 정답인지 모르겠지만 필요한 가장 중요한 파일을 얻었 기 때문에 운이 좋았습니다.
XzaR

2

리포지토리에 추가해야하는 코드를 사용했고 -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라는 폴더를 만들었습니다.


와! 이것이 내가 원했던 파일을 복구하지는 못했지만, 내가 메모 할 것입니다. 확실히 유용 할 것입니다!
vyom


1

Mac을 사용 중이고으로 백업 한 Time Machine경우 다음을 복원 할 수 있습니다.


0

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


5
무슨 말이야? git clean파일을 휴지통으로 이동하지 않습니다.
MEMark

0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.