【问题标题】:Amending the local commit after rebase in mercurial在 mercurial 中变基后修改本地提交
【发布时间】:2013-06-24 05:11:23
【问题描述】:

一开始,我的本地仓库看起来像:
C1 -> C2 -> My1
远程存储库看起来像:
C1 -> C2 -> R1 -> R2
所以我做了:
$ hg pull
$ hg rebase
现在回购看起来像:
C1 -> C2 -> R1 -> R2 -> My1

现在我对文件“File1.java”进行了一些更改,并希望这些更改成为最后一次提交 My1 的一部分。当我这样做时:
$ hg commit File1.java --amend
我得到的错误信息是:
abort: cannot amend merge changesets
在谷歌搜索中,我找到了this,据此它看起来像是 mercurial 中的一个问题,但我相信有办法解决它。
请告诉我在上次本地提交中修改新更改的步骤。

【问题讨论】:

    标签: mercurial dvcs mercurial-hook mercurial-extension


    【解决方案1】:

    看起来 My1 是一个合并,但您的图表根本没有突出显示。您可以通过以下方式检查您的回购状态:

    hg log --graph
    

    如果 My1 是一个合并(并且您希望它是合并的)。 Mercurial 2.6 应该能够编辑合并变更集。因此,如果您升级到 Mercurial 2.6.1 或更高版本,您的原始命令将起作用。

       hg commit --amend  File1.java
    

    【讨论】:

    【解决方案2】:

    My1 变更集在变基之前是合并变更集吗? rebase 确实试图保留分支之间的父级数量(您可以在rebase 下查看第 10 节了解更多信息)。

    假设你没有推送你的变更集(即它仍然有一个使用hg phase的阶段draft)并且你愿意使用hg的补丁扩展mq,你可以这样做:

    hg qimport -r tip
    hg qrefresh 
    hg qfinish -a
    

    这会将tip 变更集导入补丁队列,然后更新该补丁以包含工作目录中的当前更改。最后,它将(现已更新的)变更集移回存储库,准备就绪。

    【讨论】:

    • 谢谢。我还没有使用过 mq 扩展,但它似乎是一个非常强大的工具。
    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 2021-12-31
    • 2013-05-13
    • 2015-03-01
    • 1970-01-01
    • 2012-07-24
    • 2013-07-30
    • 2012-05-09
    相关资源
    最近更新 更多