如何在mercurial中为我的最后一次提交(尚未推送)取消提交

如何在mercurial中为我的最后一次提交(尚未推送)取消提交,mercurial,Mercurial,我有这样的情况: 我已经提交了文件a、b、c、d。现在我发现我提交错了 文件a和b;因此,在推动这些更改之前,我想先取消提交 文件a和b,这样我只能推c和d。有人能告诉我怎么做吗 通过使用mercurial命令来实现这一点 这里的uncommit意味着我不想使用“hg out-p”以及之后的名称 查看更改集并手动执行操作。假设自提交文件以来您没有在存储库上执行任何其他事务,我认为您可以将此过程分为两个阶段: hg rollback hg commit filec filed hg rollba

我有这样的情况:

我已经提交了文件a、b、c、d。现在我发现我提交错了 文件a和b;因此,在推动这些更改之前,我想先取消提交 文件a和b,这样我只能推c和d。有人能告诉我怎么做吗 通过使用mercurial命令来实现这一点

这里的uncommit意味着我不想使用“hg out-p”以及之后的名称
查看更改集并手动执行操作。

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

hg rollback
hg commit filec filed
hg rollback
应删除您刚才所做的提交,但保持文件不变。然后,
hg commit filec filed
应该提交名为
filec
filed
的文件。显然,您应该用实际文件的名称替换这些文件名


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

hg rollback
,您可以在mercurial中的中找到更多信息,您可以使用backout命令,这将创建一个与要退出的变更集相反的变更集。然后提交此变更集。在那之后,你唯一需要做的就是合并

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


可以通过示例详细解释该命令。

这对于回滚不起作用的情况非常方便,因为您
--amend
ed不推荐使用commit.rollback并将其标记为危险。“取消提交”上一次提交的一个简单方法是使用hg strip-r-1-k,因为人们给了我一个-1的注释。以下是支持我的声明的文档:@phb提到的文档说明:如果链接中断,回滚上一个事务(危险)(不推荐)请使用“hg commit--amend”而不是回滚来更正上一个提交中的错误。重要的是,
hg commit--amend
是推荐的替代方案!将这个问题与标记为重复的问题进行比较,很明显,这是一个不同的情况,有不同的答案。我们不希望删除变更集,而是希望将其转换为一组未提交的文件更改,目的是创建一个新的、已更改的变更集。由于此处无法添加更多答案,而且这实际上不是同一个问题,因此,要在最先进的mercurial上从未提交的文件中删除文件,只需启用扩展并使用
uncommit
命令即可。
-i
标志将允许您选择要取消提交的每个文件/hunk/行,这些更改将从提交中删除,同时保留在工作目录中。