我认为我“得到”Mecurial的大部分内容,但有一件让我感到困扰的事情是,当我在其他文件中执行其他人所做的更改时,对于我来说,如何提供提交消息?这些用户在将相应的变更集推送到“服务器”时已经有机会提供提交消息。
据我所知,没有办法只推动我做出更改的树的一部分,所以当其他人对树中不相关的部分中的不相关文件进行更改时,我有一个需要的变更集要推送,我必须“拉”,“合并”,然后“提交”,我提供描述他们的变化的消息,理论上已经由他们的提交消息描述的变化。
我可能不理解某事。有没有更好的方法来处理我的情况:
~$ ## Make some changes
~$ hg ci -m 'blah'
~$ ## Attempt to "push" and get "abort: push creates new remote head"
~$ hg pull
~$ hg merge # <- totally unrelated files updated here
~$ hg ci -m "SOMEONE ELSE'S FILES CHANGED....!"
~$ hg push
...
答案 0 :(得分:2)
您必须才能理解合并价值以及合并后的操作
变更集的提交消息(通常)是“此变更集所做内容的简短描述”。对于mergeset,“完成”是“合并来自...的更改”,并且从此合并集的第二个父级分支提交消息将通知,确实(哪些更改)已合并
答案 1 :(得分:1)
合并是您评论的更改,而不是您提取的更改集。所以在你的例子中:
~$ ## Make some changes
~$ hg ci -m 'blah'
~$ ## Attempt to "push" and get "abort: push creates new remote head"
~$ hg pull
~$ hg merge
~$ hg ci -m "Merged with changes on the Flibble-floo server"
~$ hg push
请记住,您可以直接从其他开发人员或不同分支机构中提取。该消息应描述您已完成的合并。
~$ hg pull bob
~$ hg merge
~$ hg ci -m "Merged with Bob's changes"
答案 2 :(得分:0)
了解merge是什么很重要。您的提交正在合并两个不同的分支,而不是提交该用户的代码,因此更合适的提交消息将涉及单词“merge”。
现在我会告诉你一个更好的方法。
在这种情况下,如果您从未推送过您想要推送的代码,那么它可能更适合rebase。您的案例完全涵盖在A common case中的该文档中。
~$ ## Make some changes
~$ hg ci -m 'blah'
~$ ## Attempt to "push" and get "abort: push creates new remote head"
~$ hg pull --rebase # Or alternately, `hg pull; hg rebase`
~$ hg push
然后你最终得到线性历史,这通常更好(可行)。
请注意,如上所述,您需要先在configuration中启用扩展程序:
[extensions]
rebase =