gpt4 book ai didi

mercurial - 如何 merge 以摆脱使用 Mercurial 命令行的头部,就像我可以使用 TortoiseHg 一样?

转载 作者:行者123 更新时间:2023-12-03 07:50:55 24 4
gpt4 key购买 nike

我的问题是这样的:

  • 如果我的 Mercurial 存储库中有两个头(有更改的分支),并且我想摆脱其中一个,但丢弃该分支中的所有更改而不是将它们合并到另一个中,并且我无法剥离删除这些变更集,所以我必须合并,我该如何使用命令行客户端做到这一点?


  • 如果我的 Mercurial 存储库中有两个 head,并使用 TortoiseHg 作为我的客户端,则存储库可能如下所示:

    two heads

    然后我可以摆脱 test2进行合并和丢弃。首先,我会更新到我想保留的头部(在这种情况下为 test3,在上图中,它已经是我的工作文件夹的当前父文件夹)。然后我会右键单击并选择“与...合并”:

    merge with...

    在弹出的对话框中,我会选择放弃来自合并目标的更改(即我想放弃所有更改的分支):

    merge dialog

    这次合并完成后, test2中的所有变化头已被丢弃,我可以提交。头部现在已经消失了,但变更集仍然是历史的一部分。

    我的问题是:如何只使用命令行客户端做同样的事情?我找不到任何与 hg merge 匹配的选项命令:
    hg merge [-P] [-f] [[-r] REV]merge working directory with another revision... snipped textoptions: -f --force       force a merge with outstanding changes -t --tool VALUE  specify merge tool -r --rev REV     revision to merge -P --preview     review revisions to merge (no merge is performed)    --mq          operate on patch repositoryuse "hg -v help merge" to show global options

    Edit: debugsetparents worked nicely:

    hg debugsetparents . 1hg commit -m "merged to get rid of changeset #1"

    Edit: Attempt to use the --tool internal:local according to one of the answers:

    @echo off

    setlocal
    if exist repo rd /s /q repo
    hg init repo
    cd repo

    rem revision 0
    echo >test1.txt
    hg commit -m "test1" --addremove

    rem revision 1
    echo >test2.txt
    hg commit -m "test2" --addremove

    rem revision 2
    hg update 0
    echo >test3.txt
    hg commit -m "test3" --addremove

    rem now let's get rid of change in revision 1 with merge
    hg merge --tool internal:local -r 1
    hg commit -m "merged"

    dir

    执行输出:

    [C:\Temp] :test
    添加 test1.txt
    添加 test2.txt
    更新了 0 个文件,合并了 0 个文件,删除了 1 个文件,未解决了 0 个文件
    添加 test3.txt
    创建了新的头
    更新 1 个文件,合并 0 个文件,删除 0 个文件,未解析 0 个文件
    (分支合并,不要忘记提交)

    驱动器 C 中的卷未标记序列号为 0e17:6aba
    C:\Temp\repo\* 目录

    16.11.2010 20:05 。
    16.11.2010 20:05 ..
    16.11.2010 20:05 .hg
    16.11.2010 20:05 13 test1.txt
    16.11.2010 20:05 13 test2.txt
    16.11.2010 20:05 13 test3.txt
    3 个文件和 3 个目录中的 39 个字节分配了 12 288 个字节
    66 600 316 928 字节空闲

    这里在第二个变更集中引入的变更(修订号为 1 的变更)现在出现在合并的变更集中。这不是我想要的。

    最佳答案

    根据 TortoiseHG 的 source , 当您查看 Discard all changes from merge target (other) revision ,它使用 hg debugsetparents命令:

    hg debugsetparents REV1 [REV2]

    manually set the parents of the current working directory

    This is useful for writing repository conversion tools, but should be used with care.

    Returns 0 on success.

    use "hg -v help debugsetparents" to show global options

    使用:
        hg up <revision-to-keep>
    hg debugsetparents <revision-to-keep> <revision-to-throw-away>
    hg commit -m "Merge to discard ..."

    关于mercurial - 如何 merge 以摆脱使用 Mercurial 命令行的头部,就像我可以使用 TortoiseHg 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4197744/

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