gpt4 book ai didi

mercurial - 我可以稍后在 Mercurial 中修复不正确的文件移动吗?

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

我们都曾经历过——您使用 Mercurial 的 hg move 以外的其他方式移动文件命令并提交并推送您的更改只是为了在很久以后才意识到您的错误。以后有什么方法可以通知 Mercurial “旧”路径和"new"路径之间存在关系?

我试过玩--after但这似乎只会出错,除非您在提交问题变更集之前碰巧发现了问题:

  > hg move OLD_PATH NEW_PATH --after
OLD_PATH: The system cannot find the file specified
abort: no files to copy

在我的特殊情况下,这个更改是由一个同事在一个(或两个)杂乱的私有(private)分支上提交的,然后 merge 到我们的 default 中。分支并推送到我们的主仓库,因此它已经传播到整个团队。

有任何想法吗?

最佳答案

首先,您确定没有检测到重命名吗? Mercurial 将默认检测文件保持不变的移动(即不是重命名+编辑的位置)并将其记录为重命名。使用 hg log -f NEW_PATH 验证它实际上没有被检测到.

如果它没有被记录为重命名,请使用正确的重命名并 merge 旧提交:

hg update -r ORIGINAL_COMMIT    # Go to the commit before the rename
hg move OLD_PATH NEW_PATH # Record the rename
hg commit # Commit the rename
hg update default # or whatever your main branch is
hg merge -r tip --tool :other # '-r tip' is technically optional
hg commit # Commit the rename to the main branch
hg log -f NEW_PATH # Verify that it worked

请注意 --tool :other将优先考虑“其他”分支(即新提交)并从那里学习正确的历史记录。

后记:也可以在事后改变历史,但为此你需要进化扩展。这样,您可以在事后更改提交(使用 hg amendhg commit --amend )并通过您的历史记录传播更改(使用 hg evolve --all )[1]。但是,您团队的其他成员可能也需要进化扩展;另外,您需要为其设置推送/拉取的共享存储库(作为 non-publishing repository )。虽然这是可能的,但您的团队可能需要的设置工作和培训可能并不值得;此外,其他与 Mercurial 相关的工具可能无法理解它并被它弄糊涂。简而言之:这是目前的高级选项,您应该仅在充分理解并且替代方案不足的情况下使用。

[1] 请注意 hg evolve实际上不会修改历史,而是创建一个新的替代历史,通过所谓的过时标记与原始历史相关。旧历史可以通过 hg log --hidden查看(或其他带有 --hidden 标志的命令)。

关于mercurial - 我可以稍后在 Mercurial 中修复不正确的文件移动吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509944/

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