cap*_*aig 10 version-control mercurial
因此,我们团队中的某个人将整个文件夹移动到子目录中,而不使用hg的重命名功能.目录结构就像我们需要的那样,但历史在移动之前已经消失了.它在移动发生时显示为新文件.自那时以来发生了许多大型合并,因此回到过去并做正确的做法并不实际.
我已经尝试了hg log --follow
它并没有帮助,因为hg不知道重命名.事后是否有任何方法可以手动将文件链接到旧的删除版本,或者是否存在一些像git可以根据hueristics推断移动和重命名的方式?如果有某种方式可以明确地说"这个文件是这个旧的已删除文件的延续.",即使这仍然需要一些时间来解决它,这将是很好的.
我们已经完全放弃了历史,但是拥有它真的很棒.
Lau*_*lst 13
您需要通过明确告知Mercurial移动了哪些文件,然后合并损坏的更改集来正确地重做移动.这样,您将恢复原始文件的历史路径.
步骤,假设<x>
是移动修订版,并且<y>
是当前的头版修订版.
hg update <x-1>
hg rename
或hg rename --after
hg merge <x>
)合并,这应该没有冲突,但如果丢弃所有更改.hg merge <y>
)以下是命令行上显示的基本过程:
$ mkdir move-merge-test
$ cd move-merge-test
$ hg init
$ echo "x" > a
$ hg add a
$ hg commit -m "initial revision"
Run Code Online (Sandbox Code Playgroud)
移动不正确:
$ mv a b
$ hg remove a
$ hg add b
$ hg status --copies
A b
R a
$ hg commit -m "incorrect move"
$ hg log --follow b
changeset: 1:b22f3e94133b
tag: tip
user: Laurens Holst <...>
date: Wed Oct 19 14:41:37 2011 +0200
summary: incorrect move
Run Code Online (Sandbox Code Playgroud)
纠正此举:
$ hg update 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg rename a b
$ hg status --copies
A b
a
R a
$ hg commit -m "correct move"
created new head
$ hg log --follow b
changeset: 2:5deabbcb5480
tag: tip
parent: 0:b82f89f0c7d9
user: Laurens Holst <...>
date: Wed Oct 19 14:46:35 2011 +0200
summary: correct move
changeset: 0:b82f89f0c7d9
user: Laurens Holst <...>
date: Wed Oct 19 14:36:35 2011 +0200
summary: initial revision
Run Code Online (Sandbox Code Playgroud)
将它与破碎的移动合并:
$ hg merge 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m "merge with broken move"
$ hg log --follow b
changeset: 3:ce65fc7b35e4
tag: tip
parent: 2:5deabbcb5480
parent: 1:b22f3e94133b
user: Laurens Holst <...>
date: Wed Oct 19 14:47:13 2011 +0200
summary: merge broken branch
changeset: 2:5deabbcb5480
parent: 0:b82f89f0c7d9
user: Laurens Holst <...>
date: Wed Oct 19 14:46:35 2011 +0200
summary: correct move
changeset: 1:b22f3e94133b
user: Laurens Holst <...>
date: Wed Oct 19 14:41:37 2011 +0200
summary: incorrect move
changeset: 0:b82f89f0c7d9
user: Laurens Holst <...>
date: Wed Oct 19 14:36:35 2011 +0200
summary: initial revision
Run Code Online (Sandbox Code Playgroud)
如您所见,历史记录现在可以正确显示所有受影响的变更集.如果文件在多次提交中移动,则基本原则保持不变,只需合并超过1次提交.如果您在移动后进行了任何提交,我建议将它们单独合并(上述步骤中的步骤6)以避免虚假冲突.