mercurial - 追溯使用 Mercurial 重命名

标签 mercurial

在我的项目中,由于无知,我没有使用过 hg removehg mvhg 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/

相关文章:

mercurial - 更新到TortoiseHg中的当前分支机构的负责人

mercurial - 有用的 TortoiseHg 扩展

c# - Mercurial,使用 .NET api 编写 Hook

mercurial - 如何正确使用hg共享扩展?

windows - 从 Windows 命令行启动 mercurial hg web 服务器

python - 将 Mercurial 迁移到 GitHub

eclipse - 将 Eclipse 中的项目置于源代码控制之下

git - ISO 9001/CMMI 对一般源代码控制,尤其是 Git/Mercurial/DVCS 有何影响?

file - Mercurial 错误 - 找不到文件

linux - 关闭一个 mercurial 分支会创建一个新的负责人?