우연히 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 strip
mq (Mercurial Queues) 확장에서 제공 하는 명령을 사용하여 커밋 된 개정을 제거 할 수 있습니다 . 그러면 파일이 다시 제공됩니다.
Mercurial의 변경 집합 데이터베이스를 변경하므로 시도하기 전에 백업을 만드십시오.