如何'hg merge'而不影响工作目录?

时间:2010-03-09 18:14:23

标签: mercurial

假设:

  • 我有一个名为MyRepo的回购。
  • 我的工作目录中有未提交的更改。
  • 我从Repo1拉取并在MyRepo中创建一个分支
  • 我想把我已经在我的回购中已经拥有的东西与刚刚拉出来的东西合并。

如上所述here,合并过程会更改工作目录的状态。

在我的场景中,我不想放弃工作目录中未提交的更改,因为此时我对更改MyRepo的状态感兴趣;不是我工作目录的状态。

有没有办法完成合并过程,包括手动解决冲突,而不影响我的工作目录的内容?此过程只能在临时文件中完成吗?或者我应该搁置我的更改,进行合并然后取消搁置以将我的工作目录恢复到合并之前的状态?

5 个答案:

答案 0 :(得分:4)

使用shelveattic扩展程序在合并时暂时存储您的更改。

答案 1 :(得分:3)

你做不到。正如文档所说,merge实际上是一个有效的树操作。在不测试结果的情况下解决冲突是疯狂的。搁置或提交更改然后进行合并。如果您不希望提交在任何地方可见,您可以提交更改,更新到以前的修订,合并新分支,应用临时提交的修补程序并剥离该临时分支。

答案 2 :(得分:1)

您可以将存储库克隆到最新的签入,将更改与克隆合并,提交,然后将新的变更集从克隆的存储库中拉回到当前的变更集中。

答案 3 :(得分:0)

我对mercurial很新,但你不能从你的本地存储库克隆并将你的工作副本复制到克隆?然后你可以在原始版本中运行合并?您可以在克隆中保留工作副本的状态,同时可以自由更改原始工作副本。

先测试一下。我从未在hg中做过。

答案 4 :(得分:0)

只需在克隆中完成。

  1. 将MyRepo克隆到MyRepo-merger,它将覆盖所有已提交的更改,但不会提取您未提交的更改
  2. 在MyRepo-merger里面从Repo1做一个拉动。
  3. 在MyRepo-merger内部执行您想要的所有hg merge
  4. 在MyRepo-merger内部推送到Repo1或原始MyRepo
  5. 回到MyRepo不会改变MyRepo的工作目录,所以这是一个安全的行动。

    请记住,在Mercurial中克隆速度非常快且便宜 - 在现代文件系统中,它们使用硬连接,因此它们甚至不占用磁盘空间。