【问题标题】:'bzr update' wiped all my local commits. Help!'bzr update' 清除了我所有的本地提交。帮助!
【发布时间】:2010-12-11 00:07:55
【问题描述】:

我认为我的变更集可能发生了一些不好的事情。

为了记录,我以前使用过 git、hg 和 svn 并取得了普遍的成功。我对 bzr 的理解还不够完整。

这就是我所拥有的(Windows XP):

1) 使用 bzr 的 svn checkout 创建的文件夹。称之为稳定
2)从我用于开发的文件夹分支的文件夹。称之为开发

我的计划是在开发分支上使用 commit --local 来跟踪更改,并且效果很好。

然后,我做了一个“bzr update”(因为当我尝试推送时它会抱怨)。当时,stable 的代码副本要旧得多。好吧,现在开发具有相同的旧副本。 'bzr log' 没有显示我本地提交的任何证据!

谁能向我解释发生了什么,以及我可以做些什么来恢复我的旧代码?

【问题讨论】:

    标签: bazaar


    【解决方案1】:

    好的,我找到了。经过一番疯狂的搜索,在查看了另一个 stackoverflow 问题后,我发现了密码词“dead head”: Some code was lost after doing bzr commit --local, bzr pull, bzr commit

    但是,他们提出的解决方案对我不起作用。什么工作,被发现在 http://chrismarinos.com/don-t-loose-your-head-with-bazaar/

    最后的答案是使用heads --all找到revision id,然后使用pull get获取所有revision:

    bzr heads --all
    bzr pull --overwrite -r revid:<revision-id>
    

    我所有的代码都回来了,现在备份了 3 到 4 次。

    【讨论】:

    • 哦,太棒了;很高兴你找到了答案。仍然考虑找出一种复制方法,一份错误报告,也许稍微改变一下你的工作方式,以减少这种事情再次发生的机会。我发现最好避免事故/错误,但缺点是我可能通过不信任我使用的所有软件并以防止它们搞砸的方式工作来隐藏我的核心工具(包括bzr)中的错误......
    • 我确实会提交一份关于此的错误报告,'bzr update' 可能会做一些破坏性的事情似乎很荒谬。
    • bzr update 将您的本地提交更改为“待提交”,您可以通过 bzr status 看到它。 bzr checkout 将您置于集中式工作流程中,bzr update 使您的树进入将您的代码与父分支合并的状态;提交此合并后,将记录待处理的提交。 doc.bazaar.canonical.com/bzr.dev/en/tutorials/…doc.bazaar.canonical.com/bzr.dev/en/user-reference/…
    【解决方案2】:

    老实说,我不能说这是怎么发生的——老实说,这看起来像是一个(听起来相当灾难性的错误)的行为,除非你做了类似 bzr pull --overwrite 或在 bzr pull 之后做了 bzr revert 之类的事情有冲突。

    首先,看看你是否可以可靠地复制这个问题。不过,无论这是否可能,file a bug report against bzr 以便可以跟踪此问题。此外,在执行任何其他操作之前,请备份您在这些分支中的数据。如果您一直在共享存储库中工作,请备份整个内容。这样,如果需要如此激烈的努力,它就可以用于法医恢复。但是,要获得更多帮助,您必须与 Bazaar 开发人员合作。在 FreeNode 的 IRC 网络上的 #bzr 房间里寻求帮助可能会有所帮助。就像在 IRC 上寻求支持一样,即使您所处的情况非常紧急,耐心也是关键。他们可能会给你一些 Python 代码或关于如何挖掘这些提交的说明,他们也可能会告诉你如何找出发生了什么。

    也就是说,在进行这样的开发时,我通常会做的是,我有一个未绑定的“上游”分支,然后是我正在工作的任何分支。完成更改后,我将从上游拉,将我的分支合并到生成的树中,然后向上推。例如:

    $ bzr init-repo project; cd project
    $ bzr branch bzr+ssh://example.org/srv/bzr/project/trunk trunk
    $ bzr branch trunk my-feature-branch
    $ cd my-feature-branch
     ... work, commit; work, commit; ...
    $ cd ../trunk
    $ bzr pull
    $ bzr merge ../my-feature-branch
     ... resolve any merge conflicts here, if any ...
    $ bzr ci -m 'Merge in my-feature-branch'
    $ bzr push :parent
    

    这样做还可以将您的工作与上游分支分开,直到您准备好合并和推送它。它确保您的本地分支永远不会被覆盖。

    【讨论】:

    • 我将我提交的答案标记为正确,以帮助遇到相同问题的任何人偶然发现此问题,但我对此表示赞同,希望这些人也会阅读它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2021-01-25
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多