【问题标题】:How do I merge local changes if any (other changes otherwise) in Mercurial?如果 Mercurial 中有任何更改(否则为其他更改),我如何合并本地更改?
【发布时间】:2011-05-03 05:21:49
【问题描述】:

我的存储库中有两个头。我有五个在本地编辑过的文件。 Bitbucket 存储库有 15 个我尚未编辑的已更改文件,但它也包含相同 5 个文件的更改版本。

我想做以下事情:

1) 如果我编辑了一个文件并且 Bitbucket 存储库包含相同的编辑文件,我希望我的更改优先考虑。

2) 如果我没有编辑过文件,我想更新到最新版本。

Mercurial 中的哪些命令序列可以让我执行此操作?我必须使用外部程序吗?

【问题讨论】:

  • 你看过hginit.com或类似的教程吗?看来您在这里的工作流程有点偏离。
  • 您是否已在本地提交更改?您是否尝试过拉取和合并?
  • 是的,我在本地提交了更改(创建了一个新的头部)。如果我在 Bitbucket 存储库中有更新版本,但我忘记在进行更改之前拉取和合并,就会发生这种情况。

标签: mercurial merge


【解决方案1】:

本地提交

hg pull
hg update --rev ${my version}
hg merge --rev ${their version} --tool internal:local

另见hg help merge-tools

没有本地承诺

hg status -qn 为您提供已更改文件的列表。由于它只有五个文件,我会手动将它们复制走,然后恢复、拉取、更新并将它们复制回原位。在 unix 上,你可以编写一个废弃的 shell 脚本,有点像这样:

ls -l *.mine # check to see that there are none
for file in `hg status -qn`; do cp ${file} ${file}.mine; done
hg revert --all; hg pull; hg update
for file in *.mine; do cp ${file} ${file%.mine}; done

这是未经测试的代码。运行它需要您自担风险。吃松饼,开心就好。

【讨论】:

    【解决方案2】:

    只是做

    hg pull
    hg merge
    

    这将从 bitbucket 中提取最新更改,并允许您按照自己的方式合并本地更改。

    这确实是一个基本功能,你应该阅读一些关于 mercurial 的文档,例如 HG Init 就像 cmets 中所说的那样。

    【讨论】:

    • 不,这不是我想要描述的。我的存储库版本有一段时间没有更新,因此每个文件的版本都存在冲突。当我尝试运行 hg merge 时,Mercurial 报告合并失败。
    • @Kevin 自动 合并失败,你必须知道告诉 Mercurial 要做什么,例如使用hg resolve。您应该真的阅读一些文档,您正在尝试的是基本操作
    • 我知道你可以解决它并指定一个合并编辑器。我想知道是否有办法自动解决它。只需在终端中输入 hg resolve,就会发现 Mercurial 无法解决这些差异。
    • krtek,抱歉,您的回复毫无帮助,而且您的语气居高临下。我在 Stack 上看到了很多问题,问的问题甚至比 Burke 的问题还要基本,但通常情况下,一个有耐心的灵魂会解释它(而且通常会得到很多分)。
    • @labyrinth 似乎缺乏耐心的灵魂来回答这个问题,或者所有人都认为我的回答足够好。我的语气可能居高临下,但没有比这更好的答案了,你拉,你合并,你解决冲突,没有其他神奇的方式来做 OP 要求的事情。
    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2014-10-15
    • 2021-08-29
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多