[mercurial] Mercurial에서 제거 된 파일을 복구하려면 어떻게합니까?

우연히 CLI가 아닌 GUI를 사용하여 Mercurial 프로젝트의 모든 파일을 제거했습니다.

Revert ok로 회복하고 일부 작업을 잃었습니다. 타임머신이 있으므로 쉽게 돌아갈 수 있습니다. 그러나 그러한 파일을 제거 / 삭제 취소하는 방법이 있습니까? 설명서를 훑어보고 검색했지만 아무것도 볼 수 없습니다. 플러그인이 있습니까?

나는 아마도 여기 내 질문에 대답하고 있지만 파일이 디렉토리에서 사라지고 복구 할 휴지통에 없었으므로 제거가 취소 불가능하다고 가정하고 있습니까?

추신 나는 그것을 알고 hg forget있거나 hg remove -Af디렉토리에서 삭제하지 않고 제거 할 것이지만 내 질문은 내가 만든 오류와 관련이 있습니다.



답변

먼저 hg grep복구하려는 삭제 된 파일을 찾는 데 사용 합니다. 이 명령의 출력은 파일이 있었던 마지막 개정판과 삭제 된 파일의 경로를 보여줍니다. 둘째, 실행 hg revert -r <revision number> <path to deleted file>
삭제 된 파일은 이제 작업 복사본에 있으며 헤드로 다시 커밋 할 준비가됩니다.


답변

의견에서 인용 :

저장소를 설정하고 모두 커밋하고 제거한 다음 다시 커밋했습니다.

이 경우 작업 디렉토리를 이전 개정으로 업데이트하면됩니다.

$ hg update -C -r-2

음수 개정 번호를 확인하십시오. 삭제 한 파일이 이전 버전에없는 경우 다음을 사용하여 찾을 수 있습니다.

$ hg log -v


답변

이것은 나를 위해 일했습니다.

hg revert -r revision pathToTheFile


답변

Mercurial 1.6 이상

삭제 파일의 이름을 아는 경우 다음을 사용하여 쉽게 개정판을 찾을 수 있습니다.

hg log -r "removes('NAME.c')"

그러면 NAME.c (루트에 있음)라는 파일이 삭제 된 witch의 개정판이 제공됩니다.

그런 다음 다른 답변과 마찬가지로 파일을 이전 개정으로 되돌릴 수 있습니다.

hg revert -r <revision number> <path to deleted file>

대신 파일 이름 패턴을 사용하여 알고있는 내용에 맞출 수 있습니다. 예를 들어 **/NAME.c모든 디렉토리에서 검색 하는 데 사용할 수 있습니다 . 파일 이름 패턴 에서 읽을 수 있습니다 . 그리고이 링크를 사용하여 새로운 revset 사양 에 대해 알 수 있습니다.


답변

수락 된 답변에 추가-커밋의 모든 제거를 취소하려는 경우 더 빠릅니다. 수백 개의 파일이 들어있는 큰 폴더를 hg addremove삭제하고을 (를) 수행했습니다. 내 의도가 전혀 아니 었으므로 모든 삭제를 취소해야했습니다.

Mercurial 저장소 기록에서 삭제 된 파일 찾기를 사용하면 신속하게? + xargs + tr, 모든 개정 -3 제거를 개정 -4에서 버전으로 되돌립니다.

hg log -r -3 --template "{rev}: {file_dels}\n" | tr ' ' '\n' | xargs hg revert -r -4

파일 이름에 공백이 있으면 실패합니다. http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html 에는 현재 {file_dels}분할 된 템플릿이없는 것 같습니다 \n.


답변

을 사용하여 저장소에서 마지막 커밋을 취소 할 수 있습니다 hg rollback. 사용 가능한 롤백 수준은 하나뿐이므로 둘 이상의 커밋으로 제거를 수행 한 경우 변경 사항을 완전히 취소하지 않습니다. 이것은 로컬 저장소에서만 작동하므로 푸시 한 경우 원격 저장소에서 실행 취소 할 수 없습니다.


답변

hg stripmq (Mercurial Queues) 확장에서 제공 하는 명령을 사용하여 커밋 된 개정을 제거 할 수 있습니다 . 그러면 파일이 다시 제공됩니다.

Mercurial의 변경 집합 데이터베이스를 변경하므로 시도하기 전에 백업을 만드십시오.