2014-12-03 178 views
-2

我刚刚失去了Mercurial补丁中的所有更改(幸运的是,我有一个备份),并且我想知道哪里出了问题。补丁修复或损坏后损失

的设置

我有一双补丁,称他们patch1.diff和patch2.diff。他们都基于修订版123,但影响完全不同的文件,没有重叠。所以,我的仓库看起来是这样的TortoiseHg(其中p是补丁和r是定期进行修正):

Graph Rev Branch Tags   Message 
    p 125 develop patch2.diff Change to existing file baz.php 

    p 124 develop patch1.diff Add new files foo.php and bar.php 

    r 123 develop    Last committed changeset 
    | 
    r 122 develop    Old changes 
    ... 

我做了什么

我想切换补丁的顺序,因为我在patch2.diff上工作已经完成,我想提交这些更改。所以,我想基础重建这个补丁在修订123这并没有工作,我结束了这样的事情:

Graph Rev Branch Tags   Message 
    r        Working directory - not a head revision! 

    r 126 develop    Change to existing file baz.php 
    | 
    p | 125 develop patch2.diff Change to existing file baz.php 
    | 
    p | 124 develop patch1.diff Add new files foo.php and bar.php 
    | 
    r-+ 123 develop    Last committed changeset 
    | 
    r 122 develop    Old changes 
    ... 

这显然是错误的。我现在有一个修订版本126,其修改与patch2.diff中的修改相同,但我仍然有一个patch2.diff,但没有按照我的预期重新设计。最重要的是,我得到了“不是主要修订”的信息,即使在我的工作目录中实际上没有任何改变。

所以我剥夺修订126在这一点上,事情就完全被打乱了,让我这个:

Graph Rev Branch Tags   Message 
    p 125 develop patch2.diff Change to existing file baz.php 

    p 124 develop patch1.diff 

    r 123 develop    Last committed changeset 
    | 
    r 122 develop    Old changes 
    ... 

patch1.diff仍然出现在TortoiseHg,但变化和提交信息都不见了。我试过hg qpush --all,并得到了这些消息:

applying patch1.diff 
unable to read patch1.diff 

我甚至不能找到我的文件系统上patch1.diff了。最终,我必须运行hg qdelete --keep patch1.diff,然后从异地备份恢复丢失的更改。

我结束了我想成为的地方,但几乎失去了一个新功能的工作时间。我只能恢复,因为我有一个新文件的异地备份。那太可怕了。

问题

发生了什么事?为什么我会失去patch1.diff?我可以理解,如果我使用hg strip的方式丢失了patch2.diff中的更改,但我不知道patch1.diff为什么会被烧毁。

+0

您不完全清楚您想要用这个问题询问什么。描述一个你想实现的具体目标请 – Gargo 2016-10-15 11:51:23

+0

@Gargo为什么downvote?这个问题非常清楚:我想知道为什么我的补丁被自发删除。这甚至有解答这个问题的答案。请重新考虑你的失望。 – 2016-10-15 11:54:24

回答

2

你偶然发现为什么mq很快就不会被推荐了。它希望保持对其控制的cset的控制,并且当你在mq控制下修改历史记录时,它会失去它。因此,mq不适用于rebase,strip,histedit ...

更好的方法是简单地停止使用mq。为新提交设置秘密(或草稿)的默认阶段。提交你的补丁作为正常的变更集 - 然后mq不能干涉rebase的正常工作,你所做的尝试只会起作用。 汞变基-s125 -d123 汞柱变基-s124 -d126 (给你回购的状态,在第一次报价,只是asusming R124,R125是正常csets,不属于MQ控制)

如果你”有点大胆,您可以看看演进扩展,这对于维护上游回购补丁队列或与合作者共同草拟变更集的人员非常有用。 请参阅http://www.logilab.org/blogentry/88203以了解汞金属相的介绍