使用Bazaar,在一些提交后恢复已删除的文件

10

我想知道是否有可能从旧版本中还原已删除的文件(一种干净的方法)

我为了进行一些测试而重命名了一个文件,然后提交了所有工作(但我忘记重命名该文件),并进行了很多其他的提交... 当我意识到时,已经太晚了...

祝好, Ayman

3个回答

13

最简单的方法是使用 bzr revert 命令,加上一个在文件被删除之前的版本号:

bzr revert -rX path/to/file
bzr commit -m 'Bringing path/to/file back'

无需合并任何内容。


4

如果您知道在哪个修订版本中删除了该文件(您可以使用 bzr log -v 查看历史记录),那么您可以使用合并命令来恢复该文件。因此,对于文件 foo 和修订版本号 N,您需要运行以下命令:

bzr merge foo -r N..N-1

例如,对于修订版本287:
bzr merge foo -r 287..286

这个命令将使你的文件恢复到第287个版本。你需要提交这个更改,然后就完成了。

小心!这将撤销整个修订版本287。我认为您无法仅合并一个特定文件的更改集。 - Brent.Longborough
是的,bzr可以从变更集中合并一个文件。你可以自己测试一下。 - bialix
是的,你说得完全正确。+1。我撤回我的评论和答案。唯一我仍然坚持的是,根据您的工作复杂性,回退到另一个分支可能是明智的选择。 - Brent.Longborough
我尝试了这个,但是bzr告诉我这是一个非版本化的文件... 我找到了另一个解决方案:undelete插件! - Ayman Khamouma
这可能是因为您在合并之前重新创建了相同的文件名,从而导致冲突? - Brent.Longborough
或者您可能拼错了文件名?(抱歉...) - Brent.Longborough

0
这不是最好的答案。请参考bialix的答案,它更简单。我将把它留在这里供参考。

这是我认为最干净的方法:

  1. 创建一个分支:

    bzr branch mytree repair-path

  2. 进入修复分支

  3. 恢复丢失的文件到它的最后一个版本(例如在此示例中为287):

    bzr revert -r 287 lost.file

  4. 提交更改

    bzr commit -m "Unshoot my foot"

  5. 返回主分支

  6. 合并修复分支

    bzr merge repair-path

  7. 准备好后,提交合并并删除修复分支。

您可以在原始工作分支中仅还原来完成此操作,但最好不要这样做。您还需要稍微担心一下任何未提交的更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接