在提交其他更改之前,如何在Mercurial中修复并提交一个更改?

时间:2013-01-13 18:17:18

标签: mercurial workflow

我有一个使用Mercurial的项目,我独自工作,经常发现自己处于相同的状况:在处理某些事情时,我意识到,其他更改应该在我完成之前修复并完成我目前的工作。所以,我试图创建一个“匿名分支”

hg update --check PREVIOUS_REVISION

但不幸的是,它不适用于未提交的更改(我真的不想提交未完成的工作)。因此,每次,我都使用来源复制目录,还原到以前的版本,修复,提交,切换回我的工作副本,改变并继续我的工作......但是它需要花费太多时间,所以也许有更好的方法来实现它并且只需要一份来源?谢谢。

P.S。可能与How do I put a bunch of uncommitted changes aside while working on something else的问题相同,但我的想法是“是否可以将未完成的工作留在'原样'状态的默认分支中,然后在不加载外部补丁的情况下继续工作?” (无论如何,如果它是重复的话,请随意关闭它)

3 个答案:

答案 0 :(得分:2)

解决“中断工作”任务的三种方法

  • 使用shelve extension:保存所有当前更改hg shelve --all,在干净的WC中进行必要的独立更改,提交,恢复工作的中间结果,保存在步骤1 hg unshelve
  • 使用匿名分支:提交“原样”你的WC,hg up <REV>到之前的提交,make“必须在之前”更改,提交,返回更老的头,合并头,继续工作
  • 使用MQ extension:使用MQ Tutorial作为起点,第一章:“不耐烦的Mq”(在qrefresh和qfinish之间将是纯粹的提交)

我更喜欢(并且总是用于不同的任务)MQ

<强>增加:

对于“干净历史”的粉丝和崇拜者,匿名分支工作流程中的一个可能的变化(避免合并)

  • hg commit -m "Unfinished work"(rev M)
  • hg up -r "tip^1"
  • ...
  • hg commit -m "Base changes"(rev N)
  • hg rebase -r M -d N(线性化历史记录)
  • hg up
  • ...
  • hg commit --amend -m "Full dependent change"

PS:我在逆向变更集中看不到任何不好,即在CSET中写a = something(data),在CSET + 1中写function something (int subject) {...}

答案 1 :(得分:0)

提交未完成的提交并不是件坏事。它可以帮助您在硬盘崩溃等环境中生存。为什么不用“正在进行中”这样的提交消息提交正在进行的代码,做你需要做的其他事情,然后继续处理它?<​​/ p>

根据定义,旧提交尚未完成。这就是为什么你在他们之后承诺了更多的东西。不要担心旧存储库的状态。

当然,您应该通过功能分支来解决问题,这样您就可以将代码推送到非default的分支。

答案 2 :(得分:0)

如果'必须'更改是不同的代码,为什么不hg record,并选择'必须'帅哥并在其他代码之前提交。