【问题标题】:How to uncommit in mercurial for my last commit(not yet pushed) [duplicate]如何在我的最后一次提交中取消提交(尚未推送)[重复]
【发布时间】:2012-03-25 21:41:45
【问题描述】:

我有这样的情况:

我已经提交了文件 a,b,c,d。现在我发现我错误地提交了 文件 a 和 b;所以在推动这些变化之前,我想做 uncommit 文件 a 和 b 以便我只能推送 c 和 d。有人可以告诉我如何 通过使用 mercurial 命令来做到这一点。

这里取消提交意味着我不想使用“hg out -p”,然后 查看更改集并手动执行操作。

【问题讨论】:

  • 比较这个和标记为重复的问题,很明显这是一个不同的情况,有不同的答案。我们不想删除变更集,而是希望将其转换为一组未提交的文件更改,以创建一个新的、已更改的变更集。
  • 由于无法在此处添加更多答案而且这确实不是同一个问题,因此要从最先进的 mercurial 上的取消提交中删除文件,只需启用 evolve 扩展名和使用uncommit 命令。 -i 标志将允许您选择要取消提交的每个文件/块/行,这些更改将从提交中删除,同时保留在工作目录中。

标签: mercurial


【解决方案1】:

假设自提交文件以来您没有在存储库上执行任何其他事务,我认为您可以将其作为一个 2 阶段过程来执行:

hg rollback
hg commit filec filed

hg rollback 应该删除您刚刚所做的提交,但保留文件已更改。然后hg commit filec filed 应该提交名为filecfiled 的文件。显然,您应该将这些文件名替换为您的实际文件名。

值得一提的是,您应该小心hg rollback - 它会更改历史记录,因此如果使用不当,可能会丢失数据。

【讨论】:

  • 回滚已弃用并标记为危险。 “取消提交”您最后一次提交的一种简单方法是使用 hg strip -r -1 -k。
  • 因为人们给我的评论是-1。这是支持我的主张的文档:mercurial-scm.org/repo/hg/help/rollback
  • 如果链接中断,@phb 提到的文档指出:hg rollback 回滚最后一个事务(危险)(已弃用)请使用 'hg commit --amend' 而不是回滚以纠正上次提交中的错误。 重要的是,hg commit --amend 是推荐的替代方法!
【解决方案2】:

hg rollback,您可以在Mercurial: The Definitive GuideChapter 9. Finding and fixing mistakes中找到更多信息

【讨论】:

    【解决方案3】:

    在 mercurial 中,您可以使用 backout 命令,该命令会创建一个与您要回退的变更集相反的变更集。然后提交这个变更集。之后您唯一需要做的就是合并。

    您可以撤销任何变更集,但不建议撤销合并变更集。

    该命令的详细解释和一个例子可以找到here

    【讨论】:

    • 这对于那些回滚不起作用的时候真的很方便,因为你 --amended 提交了。
    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2016-09-22
    • 2013-07-03
    • 2016-10-24
    • 2013-05-25
    相关资源
    最近更新 更多