2012-03-08 69 views
22

我有这样的情况:如何善变取消提交我的最后一次提交(尚未推)

我已经COMMITED文件A,B,C,d.Now我发现,我错COMMITED 文件a和b;所以在推送这些更改之前,我想要执行uncommit 文件a和b,以便我只能推c和d。可以通过使用mercurial命令告诉我如何通过 来执行此操作。

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

+0

比较这个问题和问题标记为重复,很明显,这是一个不同的情况与不同的答案。我们不希望删除变更集,而是希望将其转换为一组未经提交的文件变更,以创建新的变更变更集。 – AWrightIV 2016-12-12 21:13:53

回答

37

假设,因为你犯下的文件还没有完成对你的资料库的任何其他交易,我认为你可以做到这一点作为一个2阶段:

hg rollback 
hg commit filec filed 

hg rollback应该删除的承诺,你刚才所做的,但保留更改的文件。然后hg commit filec filed应提交名为filec & filed的文件。显然你应该用你的实际文件的名字替换这些文件名。

可能值得一提的是,您应该注意hg rollback - 它会改变历史记录,所以如果使用不正确,它可能会丢失数据。

+6

回滚已被弃用并被标记为危险。 “取消”提交上次提交的一种简单方法是使用hg strip -r -1 -k。 – phb 2016-09-08 17:46:08

+4

因为人们给了我一个-1的评论。以下是支持我的声明的文档:https://www.mercurial-scm.org/repo/hg/help/rollback – phb 2016-11-20 00:34:43

+1

如果链接中断,@phb提到的文档指出:_ [hg rollback]( https://www.mercurial-scm.org/repo/hg/help/rollback)回滚最后一个事务(危险)(已弃用)请使用'hg commit --amend'而不是回滚来纠正上次提交中的错误._重要的是,'hg commit --amend'是推荐的选择! – AWrightIV 2017-04-03 17:44:16

3

Chapter 9. Finding and fixing mistakes在善变的你可以使用退出命令,它创建了一个变更是要退出了变更的对面。然后这个变更集被提交。在这之后你唯一需要做的就是合并。

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

以示例的命令的详细说明可以找到here

+0

对于那些回滚将无法工作的时候,这真的很方便,因为你提交了'''--amend''。 – 2015-10-22 17:34:21

相关问题