代码之家  ›  专栏  ›  技术社区  ›  user191535

有什么方法可以删除Mercurial中的本地提交吗?

  •  194
  • user191535  · 技术社区  · 15 年前

    有没有办法删除我的 本地提交 所以我可以避免创建多个头、分支等?我只想删除本地提交,将更改与提示合并,然后重新提交。听起来很简单,对吧?我似乎找不到任何容易删除的方法 这样我就可以和小费完全融合了。

    同样,我只想删除用“hg ci”进行的本地提交。我不想修改文件、还原等。

    8 回复  |  直到 14 年前
        1
  •  240
  •   Daniel Sokolowski    6 年前

    启用“

    hg strip #changeset# --keep
    

    在哪里? #changeset# 是要删除的变更集的哈希。这将删除所述变更集 从中派生的变更集 不会影响你的工作目录 --keep 选择。

    Strip Extension .

    如果得到“unkown command‘strip’”,则可能需要启用它。为此,请找到 .hgrc Mercurial.ini 归档并添加以下内容:

    [extensions]
    strip =
    

    注意(Juozas在他的评论中提到)在Mercurial中有多个头部是正常的工作流程。你不应该用脱衣舞指挥来对抗它。相反,您应该将您的头与传入的头合并,解决任何冲突,测试,然后推送。

    这个 strip 当您真的想清除污染分支的变更集时,命令非常有用。事实上,如果你在 this question 完全删除所有“草稿”更改集 the top answer ,这基本上意味着:

    hg strip 'roots(outgoing())'
    
        2
  •  100
  •   StayOnTarget Charlie Flowers    6 年前

    如果您使用的是Hg Tortoise,请激活分机“ “在:

    1. 文件/设置/扩展名/

    然后从要开始条带的位置选择底部修订,方法是 right click 然后选择:

    1. 剥皮

    就像这样:

    enter image description here

        3
  •  21
  •   Xavier    8 年前

    现代答案(仅适用于Mercurial 2.1之后):

    Phases 并将不想共享的修订标记为机密(私有)。这样当你推的时候他们就不会被送去了。

    在陆龟游戏中,你可以右击一个提交来改变它的阶段。

    也: 您还可以使用扩展“rebase”在拉取之后将本地提交移动到共享存储库的头部。

        4
  •  15
  •   StayOnTarget Charlie Flowers    6 年前

    EditingHistory 工具然后你可以 hg clone -r 你的回购协议只会得到这些变化。

        5
  •  9
  •   Kyle    9 年前

    我也遇到了这个问题。我做了2个 commit 希望回滚并删除两个提交。

    $ hg rollback
    

    但是 hg rollback 只回滚到最后一次提交,而不是2次提交。当时我没有意识到这一点,我改变了代码。

    汞回退 我发现我可以利用 hg strip #changeset# hg log -l 10 找到最新的10个提交并获得我想要的正确变更集 strip .

    $ hg log -l 10
    changeset:   2499:81a7a8f7a5cd
    branch:      component_engine
    tag:         tip
    user:        myname<myname@email.com>
    date:        Fri Aug 14 12:22:02 2015 +0800
    summary:     get runs from sandbox
    
    changeset:   2498:9e3e1de76127
    branch:      component_engine
    user:        other_user_name<name@email.com>
    date:        Mon Aug 03 09:50:18 2015 +0800
    summary:     Set current destination to a copy incoming exchange
    
    ......
    
    $ hg strip 2499
    abort: local changes found
    

    abort: local changes found 意思是?意思是 hg 找到尚未提交的代码更改。所以,要解决这个问题,你应该 hg diff 保存您更改的代码 hg revert . 就像这样:

    $ hg diff > /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
    $ hg revert file_you_have_changed
    $ hg strip #changeset#
    

    完成上述操作后,您可以 patch diff文件和代码可以添加回项目中。

    $ patch -p1 < /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
    
        6
  •  9
  •   Vadim Kotov First Zero    8 年前

    Rebase extension ,使用 hg pull --rebase

        7
  •  5
  •   Vadim Kotov First Zero    8 年前

    如果你熟悉git,你会很乐意使用 histedit 就像 git rebase -i .

        8
  •  4
  •   Yangshun Tay    7 年前

    hg strip git reset 如果你熟悉git。

    使用控制台:

    1. hg log -l 10 . 此命令显示最后10次提交。找到你想要的承诺。您需要变更集行中的4位数字 changeset: 5888:ba6205914681

    2. hg strip -r 5888 --keep . 这将删除提交的记录,但保留所有文件的修改,然后您可以重新提交它们。 (如果要删除文件以便删除--请保留 hg strip -r 5888

    推荐文章