【问题标题】:Mercurial: Any way to "merge and discard changes"?Mercurial:有什么方法可以“合并和丢弃更改”?
【发布时间】:2011-11-20 11:55:41
【问题描述】:

我有一个类似这样的图表日志:

(snip)
  | |
  | o    1) Other Dev: Commit
  | | \
  o | |  2) Me: Commit
/ | | |
| | o |  3) Other Dev: Commits with an error
| |/| |
| o |/   4) Me: Merge and commit
|  /|    
|/  |
o   |    5) Me: Realize there were bugs in the commit and take earlier version to merge with
|   o    6) Other Dev: Fixes error
o /      7) Me: committing some changes
|/
o        8) Me: Merge fixed tip

在 (8) 处,除了 (4) 处悬空的额外头部外,一切都应如此。为了摆脱它,我必须合并 (4) -.-> (8) 但是,由于 (4) 中没有我需要的内容,我可以安全地丢弃所有更改。我可以手动逐个文件地进行合并(通常这没什么大不了的),但是为了我自己的启发 - 有没有一种简单的单行方式来表示“合并(4)和(8)并且总是拿(8)“?

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    是的。 internal:local 内置合并工具。

    $ hg merge 4 --tool internal:local
    

    同样有internal:other 选择文件的其他版本作为合并版本。

    这里有一个例子来说明发生了什么,从一个带有单个文件的 repo 开始:

    $ echo a >> a
    $ hg ci -Am.
    adding a
    $ echo a >> a
    $ hg ci -Am.
    

    将其分支并在a中放置冲突:

    $ hg up 0
    1 files updated, 0 files merged, 0 files removed, 0 files unresolved
    $ echo b >> a
    

    还可以在合并的分支中添加另一个文件:

    $ echo b >> b
    $ hg ci -Am.
    adding b
    created new head
    

    返回并合并匿名头部:

    $ hg up 1
    1 files updated, 0 files merged, 1 files removed, 0 files unresolved
    $ hg merge 2 --tool internal:local
    1 files updated, 1 files merged, 0 files removed, 0 files unresolved
    (branch merge, don't forget to commit)
    

    此时如果没有合并工具,我们自然会在a 上遇到冲突。但是使用合并工具,我们告诉 Mercurial 采用与 cset 合并的每个文件的第一个父文件的版本。

    $ hg st
    M a
    M b
    $ cat a
    a
    a
    $ cat b
    b
    

    【讨论】:

    • 美丽。所以澄清一下,这里发生的事情是您正在指定一个用于解决合并问题的自定义工具,并且您使用的是始终选择本地版本的内置工具。
    • +1 以获得非常详细的答案。我意识到这是一个老问题,但这只会导致合并冲突被解决为“本地”......来自“b”的任何新文件仍会在合并的变更集中创建。有什么办法没有这些吗?还是应该手动删除它们 (hg forget ...)?
    • 为了回答我自己的小问题,tortoisehg 使用“谨慎使用”命令debugsetparents 实现了这一点,有效地假装执行合并。嗯。
    • 使用--tool internal:local 对我不起作用,它保留了所有不好的更改。 TortoiseHg 使用 debugsetparents 确实有效。
    • 这种方法会丢弃不需要的分支中的更改,但不会丢弃其中的新文件。我认为正确的答案是这里公认的答案:stackoverflow.com/questions/4197744/…
    猜你喜欢
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多