代码之家  ›  专栏  ›  技术社区  ›  Miguel Ping

mercurial:从远程分支中删除变更集

  •  22
  • Miguel Ping  · 技术社区  · 15 年前

    是否有方法从远程变更集中删除,或删除整个变更集? 我不小心推了一个 .war 文件到远程报告,我想删除它。

    4 回复  |  直到 7 年前
        1
  •  34
  •   Vadim Kotov First Zero    7 年前

    Mercurial非常努力地保护您的数据安全,因此您一般不能更改历史记录。

    也就是说,Mercurial有许多扩展,可以让您很容易地改变历史。有一个 page on the wiki about editing history . 那一页也解释了后果。

    在您的具体案例中,您必须问自己,其他人是否已经提取了您的变更集?如果是这样,那么即使您删除了它,它仍将存在于它们的克隆中,并且您最好接受错误。

    如果您决定删除它,我建议使用 hg clone 不带它就能得到一份副本。这是安全的方法,因为它总是会留下一个备份。如果你推 [z] 到远程存储库:

    [x] --- [y] --- [z]
    

    现在要删除它,然后登录到服务器并执行

    hg clone -r y repo repo-without-z
    

    然后 repo-without-z 在之前包含所有变更 [y] 也就是说, [Z] 将被删除:

    [x] --- [y]
    

    然后可以继续工作并推送新的变更集:

    [x] --- [y] --- [w]
    

    如果我把 [Z] 变更集已存在,现在拉 [w] 我将在存储库中看到两个标题:

                [w]
               /
    [x] --- [y] --- [z]
    

    这本身并不危险,但人们可能会感到惊讶。如果我删除 [Z] 从我的克隆中,我最终将得到与您相同的存储库。但是,如上所述,如果您有许多用户,这可能是不切实际的。

    您也可以使用 MQ extension 零钱已经到位了。这样你就不会有新的克隆人了。

    最后,如果您确定推送是在服务器上完成的最后一个操作,那么 hg rollback 可用于删除最后一个事务。但是,如果您是唯一可以推送到存储库的人,那么不要这样做,否则您可能最终会回滚另一个事务。

    如果存储库打开 Bitbucket ,则无法登录到服务器。但BitBucket最近在其Web界面上添加了一个条带功能。在“管理”部分中查找“存储库管理”。

        2
  •  13
  •   tshepang Arrie    9 年前

    BitBucket在剥离时为您提供了一个捆绑包(备份),这是 计算你的配额。之所以这样做,仅仅是因为我们没有使指定您使用多少空间的缓存键失效。

    这是我们系统中的一个错误,将被修复。在此之前,请确保已删除变更集,并且备份是免费的:—)

        3
  •  4
  •   Miguel Ping    15 年前

    我使用hg mqueue扩展来编辑历史。看来起作用了。 谢谢大家。

        4
  •  1
  •   MarwaAhmad RameshVel    7 年前

    我有一个类似的例子,我想使用TortoiseHg远程从“dev”分支中删除一个合并的分支“a”变更集:

    1. 从分支A的父分支创建分支AA;其来源。
    2. 将a合并到a a(工作目录)中,并确保选中“放弃其他版本的所有更改”选项。
    3. 将a a合并到dev分支(带有一条提交消息,指示分支a的更改已被删除)。

    您将看到分支A更改在dev中不再存在。

    推荐文章