我有一个很长一段时间开发的分支。在开发期间,默认分支已多次合并到该分支中。我现在想要检查在该分支上完成的所有更改,忽略合并,以确定将其合并为默认值是否安全。
我试过了
hg diff -r "branch('myBranch') - merge()"
但它仍然显示合并引入的变化。也试过跟随这个How to show the diff specific to a named branch in mercurial但是
hg diff -r "branch('myBranch') - branch('default')"
仍然带来合并带来的变化。
您的命令的问题在于,当您执行hg diff
并将其传递给多个更改集时,您实际上在这些更改集之间执行差异,因此您将看到合并结果。
如果您只想查看更改集所做的更改,那么您可以使用export
:
$ hg export -r "branch('mybranch') and not merge()"
// lists the changes made by each changeset
为了便于查看,您可以将这些输出到名称基于修订/变更集ID的文件:
$ hg export -r "branch('mybranch') and not merge()" -o "%H.patch"
...为mybranch
中的每个非合并变更集创建一个文件,并将其输出到名为“40-change changeset id.patch”的文件。如果您更喜欢修订号(仅对本地存储库有用,因为版本ID是本地的),请使用"%R.patch"
。
以下使用log
命令,但使用--patch
参数,它也可以显示修改后的行:
hg log --branch my-branch --no-merges --patch
简写:
hg log -Mpb my-branch
这是一个非常好的问题,我试图在很长一段时间内找到好的答案,但却找不到好的答案。好的,100%工作的一件事是这样的:
hg status # make sure that you don't have local changes
hg up <target_branch>
hg merge <your branch>
hg diff > merge.diff
hg up -C # this one cleans the merge
我一直使用这个工作流程,但它并不能完全满足我,因为它需要切换分支(当我实际上可能不希望在这个确切时刻进行实际合并时,我只是检查那里有什么)
我一直在寻找一个很好的解决方案,但到目前为止还没有找到。试过那些:
hg diff -r "branch('.') and ! merge()" # this page
hg diff -r "default:branch('.') and not merge()"
hg diff -r "parents(branch(.)):branch('.') and not merge()"
这个问题也讨论在:
尝试:
hg diff -r"ancestor(default,my_branch)" -rmy_branch
如果你没有对分支进行任何合并,那么“祖先”将获取原始分支点。如果你已完成合并,那么“祖先”将获取最新的合并点。
例如,在下图中,您将得到520和519之间的差异:
@ 521 (default)
|
| o 520 (my_branch)
|/|
o | 519
| |
o | 518
| |
o | 517
| |
| o 516
| |
| o 515
| |
| o 514
|/
o 513
在下面的简单图表中,您将获得516和513之间的差异:
@ 517 (default)
|
| o 516 (my_branch)
| |
| o 515
| |
| o 514
|/
o 513
根据Matt Mackall你可能想要的是:
hg diff -r mainbranchrev -r mywork
他写:
您可能会认为“变更集是一个delta”或类似的东西,这意味着Mercurial可以神奇地将一堆非连续的增量链接在一起构建一个更大的delta,这只是你的变化。
事实上,Mercurial比这简单得多。变更集实际上是一个快照:一组完整的文件,表示提交时项目的状态。差异只是这两个快照之间的差异。所以当你这样做时:
hg stat --rev'3408 :: 3575和用户(mdiamond)而不是merge()'
..status只使用结果集的第一个和最后一个变更集来进行计算。
当你在开发分支上进行增量合并时,你就不可避免地将你的工作与主线开发纠缠在一起,并且Mercurial不够聪明,无法以你要求的方式解开它。您最好的选择是将您的工作负责人与主要分支的负责人进行比较:
hg diff -r mainbranchrev -r mywork
..它将显示你所有的工作以及你必须做的任何合并修正。