如何撤消提交拉动

时间:2012-04-24 10:22:48

标签: mercurial commit undo pull

我今天遇到了我的第一个善变问题。我在我的回购中,我修改了一个文件而且我做了一个

hg commit
hg pull
接下来是     hg更新     hg rollback

修复我所做的事情,(但实际上我没有推动任何东西) 问题是,当我做拉(我应该在提交之前做,头改变了,所以hg头看起来像:

- Modif from yesterday
- My modif
- Modif from last week

现在我看到有人也做了另一次修改(通过http界面)。我应该怎么做才能修复我的本地仓库(如果可能的话修改我的总结)并在另外两个修改后推送它。

非常感谢。安静的混乱,在我的“单人”回购中更容易..

1 个答案:

答案 0 :(得分:3)

您当地的回购不需要“修理”。这是一个非常标准的案例,如果你经常使用Mercurial,你会经常看到。

问题是 多头

你可以合并你的头,假设你的工作目录是你的版本而且只有另一个头:

hg merge

这将导致合并变更集(就像您要跨分支合并一样)。

或者您可以启用rebase extension将您的版本重新定位到分支的顶端(另一个头):

hg rebase --source<YourVersionNumber> --dest<TipVersionNumber>

这将导致合并变更集,并且只会将您的更改移植到您指定的变更集之上,就好像它们始终是该变更集所生成的(因此,变基或“新”基础)。

多个头是一个有趣的内部分支分支...你可以继续检查你自己头上的东西,并使用hg update在头部之间切换。我们在服务器上为每个分支阻止多个头,因此我们的推送会失败。我建议将多个头保持在本地,因为它们不像分支那样清晰。

我倾向于以两种方式之一使用Mercurial:

  1. 如果工作量大,我会将其分支并遵循持续集成实践(不断将主分支合并到我自己的等)。当我对最终结果感到满意时,我会重新合并回主页。
  2. 如果工作规模很小,我会简单地对抗主分支并且经常“合并”头部。我说“合并”,因为我通常使用rebase。如果变化很简单并且不太可能发生冲突,重新编写基础非常有效。
  3. 我坚硬而快速的规则:如果我不能使用rebase,我把它放在一个由main生成的分支上。