在我的项目中,由于无知,我没有使用过 hg remove
、hg mv
或 hg addremove
。因此,每次我重命名或移动文件时,该文件的历史记录都会被搞乱,现在当我查看单个文件的历史记录时,我只会看到历史记录的一部分。
我正在寻找一种方法来返回并追溯修复所有这些重命名错误,以便文件历史记录保持在一起。我想最有可能的是编辑“.hg\store\data”中的数据以使其工作的方法。我一直在进行实验,我在我重命名的文件的数据中看到了行 copy:
和 copyrev:
,所以我怀疑这与它。
假设我拥有中央存储库的控制权,并且当前没有它的克隆。
最佳答案
摘要:
由于您对存储库拥有完全控制权,因此可以使用正常的 hg 命令 100% 修复此问题。
原则思想是在正确的位置插入新的变更集,从而有效地纠正原始变更集。
假设您的历史记录如下所示:
A-B-C-*
(*
是您的工作文件夹)
您正是在 B
中重命名了文件系统中的文件,而没有在 hg 中重命名它。
这样做:
hg up A
hg revert -r B --all
hg mv oldfilename newfilename
hg commit -m <message>
这里的关键是使用revert
,它用于将更改从更改集中复制到您的工作文件夹中。 只能以这种方式工作,因为您已更新到要恢复的变更集的前身。
此时您的历史记录如下所示:
A-B-C
\
B'-*
其中 B'
是 B
的“更正”变体。继续:
hg rebase -s C -d B'
你有:
A-B
\
B'-C-*
您现在可以通过执行以下操作进行清理:
hg strip B
留下:
A-B'-C-*
当然,在我使用像 B
这样的修订版本的地方,您需要输入实际的修订版本 # 或哈希值。
您还可以使用 TortoiseHG 或其他一些 GUI 来执行许多这些步骤。
关于mercurial - 追溯使用 Mercurial 重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43790053/