mercurial - 查看分支上的更改,忽略所有合并提交

时间:2012-12-21 14:30:28

标签: mercurial branch diff branching-and-merging

我有一个很长一段时间开发的分支。在开发期间,默认分支已多次合并到该分支中。我现在想要检查在该分支上完成的所有更改,忽略合并,以确定将其合并为默认值是否安全。

我试过

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')"

仍会带来合并带来的变化。

6 个答案:

答案 0 :(得分:7)

您的命令的问题在于,当您执行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"

答案 1 :(得分:5)

以阅读revsets语法

你的案子

hg log -r "branch('myBranch') and ! merge()"

答案 2 :(得分:2)

以下使用log命令,但使用--patch参数时,它也可以显示已修改的行:

hg log --branch my-branch --no-merges --patch

简短形式:

hg log -Mpb my-branch

答案 3 :(得分:1)

这是一个非常好的问题,我试图在很长一段时间内找到好的答案,但却找不到好的答案。好的,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()"

这个问题也讨论在:

答案 4 :(得分:1)

尝试:

    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

答案 5 :(得分:0)

每个Matt Mackall您可能想要的是:

hg diff -r mainbranchrev -r mywork

他写道:

  

您可能会觉得“变更集是增量”或   类似,这意味着Mercurial可以神奇地链接在一起   一堆不连续的增量来构建一个更大的增量   您的更改。

     

事实上,Mercurial比这简单得多。一个变更集实际上是一个   快照:代表状态的完整的完整文件集   提交时的项目。而差异只是区别   在这两个快照之间。因此,当您这样做时:

     

hg stat --rev'3408 :: 3575和user(mdiamond)而不是merge()'

     

.. status仅使用结果集的第一个和最后一个变更集   进行计算。

     

在开发分支上进行增量合并时,您就是   与主线开发和Mercurial密不可分   还不够聪明,无法按照您的要求进行整理。您的   最好的选择是将您的工作负责人与主要负责人进行比较   分支:

     

hg diff -r mainbranchrev -r mywork

     

..它将显示您的所有工作以及您必须执行的所有合并修正   做。