Mercurial Change Conflicts

时间:2011-05-03 19:31:12

标签: php mercurial

我现在正在与SVN的Mercurial合作....与SVN我从未失去任何变化,合并非常聪明。有了Mercurial,当我提交本地更改时,我只是从主回购中拉了一下,它覆盖了我当地的变化。这是场景......

使用file.php前250行相同。在本地我添加了3个功能因为我正在使用特定功能。我做出了改变,忘记了推动DEV。所以在DEV上我也添加了3个新功能。本地3个功能(尽管完全不同)被DEV上的3个功能覆盖......

我似乎无法想出为什么会发生这种情况的合理原因......

我正在使用TortoiseHG,而不是命令行。

2 个答案:

答案 0 :(得分:3)

您的说明中缺少一个步骤。根据描述,DEV从未看到所谓的丢失功能;它不能覆盖它们。但是,您可以从DEV中获取更改,将工作分支与DEV相同,而本地提交是另一个叶子。在这种情况下,您可以通过合并两个分支来恢复它们。使用hg heads查看是否有另一个未完成(未合并)分支。 关键步骤是更新,例如hg pull -uhg update -c,这将隐藏(但不会损坏)本地提交的工作。

编辑,因为我看到你使用TortoiseHg:

TortoiseHg workbench很好地展示了这棵树。拉确实会像我预期的那样创建分支,而新的提示确实是我从单独的存储库中提取的。工作台显示当前工作目录(类似于1+),因此您可以看到它来自哪个分支;尝试选择其他分支并选择“与本地合并”以收集所有更改。

Mercurial不会自动为您合并的原因是哲学而非技术。 cvs / svn工作流有分支采用管理程序,每个提交到分支必须是中央存储库的最新;因此所有更新都会合并。相反,Mercurial和git采用分支应该很容易的方法,您可以选择何时以及是否将每个分支加入任何其他分支,并为分支命名是一项单独的任务。 TortoiseHg中的pull对话框可以尝试使用Post Pull设置更新和自动解决合并冲突,更像cvs。

Mercurial维基有an article on Mercurial workflows。特别是,CvsLikePractice可能比我更好地解释了分支。

答案 1 :(得分:1)

在注意到本地版本中的行丢失之前,您运行了什么Mercurial命令?

你是否从DEV做过hg拉?

我之前没有看到Mercurial丢失这样的变更集,我想如果你已经提交了所有内容,因为你已经说过某些地方的文件历史记录中的更改是最小的。