gpt4 book ai didi

version-control - 如果移动操作不正确,则会在HG中恢复历史记录

转载 作者:行者123 更新时间:2023-12-04 03:13:06 24 4
gpt4 key购买 nike

因此,我们团队中的某人在不使用hg的重命名功能的情况下将整个文件夹移动到了子目录。目录结构就像我们需要的一样,但是历史在迁移之前已经消失了。发生移动时,它将显示为新文件。从那时起,发生了许多大型合并,因此,将时间倒回正确的做法实际上是不现实的。

我已经尝试过hg log --follow,但它没有帮助,因为hg不知道重命名。在发生这种情况之后,是否有任何方法可以将文件手动链接到旧的已删除版本,或者是否有某种功能,例如git可以根据启发式推断移动和重命名的方式?如果有某种方式可以明确地说“此文件是该旧删除文件的延续”,那将是很好的,尽管那仍需要一些时间才能将其正确修复。

我们几乎都放弃了重新找回历史的机会,但是拥有它真是太好了。

最佳答案

您需要通过明确告诉Mercurial移动了哪些文件,然后合并损坏的变更集来正确地重做移动。这样,您可以将历史记录路径还原到原始文件。

步骤,假设<x>是移动修订,并且<y>是当前的头部修订。

  • 移动前更新至修订版:hg update <x-1>
  • 重做此操作,但现在可以正确使用hg renamehg 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"

    错误移动:
    $ 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

    更正此举:
    $ 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

    将其与折断的 Action 合并:
    $ 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

    如您所见,历史记录现在可以正确显示所有受影响的变更集。如果文件在多个提交中移动,则基本原理保持不变,只是在多个提交之间进行合并。如果您在移动后进行了任何提交,我建议将它们分开合并(上述步骤中的第6步),以避免虚假冲突。

    关于version-control - 如果移动操作不正确,则会在HG中恢复历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815001/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com