How can I recover a removed file in Mercurial (if at all)?

后端 未结 9 747
有刺的猬
有刺的猬 2020-12-23 08:38

Accidentally, by using a GUI as opposed to CLI, I removed every file in a Mercurial project.

I recovered with Revert ok and lost some work, which as I have time mach

相关标签:
9条回答
  • 2020-12-23 09:17

    Well this worked for me.

    hg revert -r revision pathToTheFile
    
    0 讨论(0)
  • 2020-12-23 09:22

    You can undo the last commit on a repo with hg rollback. There's only one level of rollback available, so if you did the remove with more than one commit, this won't completely undo your change. This only works on your local repository, so if you've pushed you won't be able to undo it in the remote repo.

    0 讨论(0)
  • 2020-12-23 09:25

    First, use hg grep to find the deleted file you wish to recover. The output of this command will show you the last revision for which the file was present, and the path to the deleted file. Second, run hg revert -r <revision number> <path to deleted file> The deleted file will now be in your working copy, ready to be committed back into head.

    0 讨论(0)
  • 2020-12-23 09:26

    An addition to the accepted answer - this is faster if you want to undo all removals in a commit. I deleted a large folder with a few hundred files in it and did hg addremove, which was not at all my intent, so had to undo all of those deletes.

    Using Find deleted files in Mercurial repository history, quickly? + xargs + tr, revert all revision -3 removals to the version from revision -4:

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

    Note that this will fail if any of your files have spaces in the name; http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html doesn't appear to have any templates where {file_dels} is split by \n at the moment.

    0 讨论(0)
  • 2020-12-23 09:31

    The below method is straightforward and so stupid that it cannot go wrong. If you have deleted or renamed multiple files, it will be ok.

    hg clone mydirectory mydirectory1
    

    and now you start mc (or Far Manager) and compare what it was vs what it has become.

    when it's done, just delete mydirectory1.

    0 讨论(0)
  • 2020-12-23 09:32

    Quote from comment:

    I set up a repository, committed all, Removed and then committed again

    If this is the case then you just need to update the working directory to the previous revision:

    $ hg update -C -r-2
    

    Note the negative revision number. If the files you deleted aren't in the previous revision, you can find them by using:

    $ hg log -v
    
    0 讨论(0)
提交回复
热议问题