【发布时间】:2014-12-03 05:22:13
【问题描述】:
我刚刚丢失了 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 会遭到破坏。
【问题讨论】:
标签: mercurial patch tortoisehg