我正在从Subversion过渡到Mercurial,在这里,我习惯于使用svnmerge.py跟踪已经合并或被阻止的更改:
# Mark change 123 as having already been merged; it will not be merged again, even if a range
# that contains it is subsequently specified.
svnmerge.py merge -M -r123
#
# Block change 326 from being considered for merges.
svnmerge.py merge -X -r326
#
# Show changes that are available for merging from the source branch.
svnmerge.py avail
#
# Do a catchall merge of the remaining changes. Neither change 123 nor change 326 will be
# considered for merging.
svnmerge.py merge我希望能够为hg拉/推/合并/嫁接做一些类似的事情,这样如果我知道我从来不想合并一个给定的改变,我就可以阻止它去考虑,让随后的樱桃采摘,合并等等变成更多的火--而且--忘记事情。我已经做了很多谷歌,但还没有找到一个方法来做到这一点。
似乎也没有办法查看尚未嫁接的变化的列表。
因为我经常整理其他开发人员并帮助他们进行合并,所以能够做这些事情是非常有帮助的,人们很可能会认为这是“逆向挑选”;也就是说,标记那些您不想合并的更改,然后进行大部分的合并。
发布于 2011-12-21 15:47:51
基于DAG的系统,如Mercurial and,要么全部要么一无所有:当您合并两个分支时,您将共同祖先和两个分支进行三向合并。
三向合并是,只涉及到每个分支的最后阶段的.例如,如果您在10个步骤(它是1000个步骤)中进行更改并不重要--合并结果将是相同的。
这意味着忽略更改集的唯一方法是在合并之前将其退出:
$ hg backout BAD这将取消分支上的变更集,使之看起来从未从三方合并的角度进行。
如果您有一个想要合并但忽略的整个分支,则可以进行虚拟合并。
$ hg merge --tool internal:local --non-interactive
$ hg revert --all --rev .这会经过合并,但在提交之前会恢复到原来的状态。
我能给你的最好的建议是构建你的工作流程,这样上面的备份就没有必要了。这意味着在最老的应用程序分支上提交一个bugfix修复。如果在创建feature时发现了bug,则使用hg bisect确定何时引入该bug。现在更新回最古老的分支,您仍然希望修复该错误:
$ hg update 2.0
# fix bug
$ hg commit -m "Fixed issue-123"然后将错误修复合并到以后的所有分支中:
$ hg update 2.1
$ hg merge 2.0
$ hg commit -m "Merge with 2.0 to get bugfix for issue-123"
$ hg update 2.2
$ hg merge 2.1
$ hg commit -m "Merge with 2.1 to get bugfix for issue-123"如果错误修复不再适用,那么您应该仍然合并,但丢弃不相关的更改:
$ hg update 3.0
$ hg merge 2.2 --tool internal:local --non-interactive
$ hg revert --all --rev .
$ hg commit -m "Dummy merge with 2.2"这确保了您始终可以使用
$ hg log -r "::2.2 - ::3.0"查看2.2分支上尚未合并为3.0的变更集。
https://stackoverflow.com/questions/8585509
复制相似问题