【问题标题】:In Mercurial, how to "merge" with the commit's (single) parent?在 Mercurial 中,如何与提交的(单个)父级“合并”?
【发布时间】:2015-10-05 16:53:38
【问题描述】:

我从事过一些项目。我可以看到我的项目与其(唯一)父级之间的区别:

hg kdiff3

(在我配置“kdiff3”后,如图所示here)。但是,我希望能够编辑我的文件,也许删除我的一些更改,编辑其中一些或进行新的更改。但是该命令仅向我显示差异,而不是让我编辑它们。如果我尝试:

hg merge 5861231e8335

(当“5861231e8​​335”是工作目录的(唯一)父级时)我得到:

abort: merging with a working directory ancestor has no effect

那么我怎样才能与父母“合并”呢? (最好使用“kdiff3”)

【问题讨论】:

  • 我不太清楚你在问什么。你能给出hg log -G的输出来说明情况吗?您是否只是想将多个变更集合并为一个,即将多个变更集合并为一个?那么hg fold 可能是你的朋友。请注意,这是一个历史编辑功能,因此您可以永久更改历史记录(进行备份!),并且您可能需要(强制)将阶段更改为草稿,然后才能这样做。
  • 不,我只是想看看工作目录和它的(唯一的)父目录之间的区别,但我可以编辑我的文件。
  • 您想编辑将由hg diff 创建的补丁文件,从而在您当前的工作目录状态和您检出的未修改版本之间进行编辑?或者只是同时查看工作目录的当前状态,并在第二个视图中查看父版本的未修改状态?

标签: version-control merge mercurial dvcs kdiff3


【解决方案1】:

hg shelve 让您暂时搁置(搁置)工作目录与其父目录之间的差异部分,因此它将为您提供所需的“删除一些更改”部分。它不允许您进行编辑,但您可以将所做的更改放在一个架子上,然后重新实现更改。如果您想恢复原来的更改,只需将新的更改放在新的架子上,然后将原来的更改从架子上拉下来。


或者,使用hg export(或hg clone 创建父变更集的副本并更新到父变更集,但您不需要为此的历史记录),一旦获得副本,您就可以在 Mercurial 之外,直接使用 kdiff3 将 parent 的副本与您的工作目录合并。

【讨论】:

    【解决方案2】:

    首先,您误解了 hg merge 的作用。它合并了来自 2 个父级的变更集。它不会合并未提交的更改。

    要将未提交的更改合并到当前提示更改集中,您需要:

    hg commit --amend
    

    用新的提示替换当前提示。

    回答您关于在差异化程序中进行编辑的问题。我不知道在文件差异器中编辑一堆文件的任何方法;那是因为文件集被复制到临时目录中,在那里编辑它们显然毫无意义。但是,您可以一次比较和编辑一个文件,因为一个文件已就地比较,而无需复制到临时目录。

    当然,在普通编辑器中编辑文件不是比在文件差异器中更好吗?当然,一个可以编辑,但只能作为最后的手段。 OTOH,如果您使用一次查看一个文件的差异的技巧,可以在您的真实编辑器中进行编辑,然后在差异器中观察差异的变化。

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2010-09-30
      相关资源
      最近更新 更多