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

mercurial-查看忽略所有合并提交的分支上的更改,mercurial,branch,diff,branching-and-merging,Mercurial,Branch,Diff,Branching And Merging,我有一个分支,发展了很长一段时间。在开发过程中,默认分支多次合并到该分支中。我现在想回顾一下忽略合并对该分支所做的所有更改,以确定将其合并为默认值是否安全 我试过了 hg diff-r“分支('myBranch')-merge()” 但它仍然显示了合并带来的变化。我也试过了,但是 hg diff-r“分支('myBranch')-分支('default')” 仍然会带来合并带来的更改。您需要阅读有关语法的内容 你的案子 hg log-r“branch('myBranch')和!merge()”命

我有一个分支,发展了很长一段时间。在开发过程中,默认分支多次合并到该分支中。我现在想回顾一下忽略合并对该分支所做的所有更改,以确定将其合并为默认值是否安全

我试过了

hg diff-r“分支('myBranch')-merge()”

但它仍然显示了合并带来的变化。我也试过了,但是

hg diff-r“分支('myBranch')-分支('default')”


仍然会带来合并带来的更改。

您需要阅读有关语法的内容

你的案子


hg log-r“branch('myBranch')和!merge()”
命令的问题是,当您执行一个
hg diff
并将几个变更集传递给它时,实际上是在这些变更集之间执行一个diff,因此您将看到合并结果

如果您只想查看变更集所做的更改,则可以使用
导出

$ 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位变更集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
这一问题也在以下章节中讨论:

  • 这有一个很好的答案:“所以,如果你能明确地定义它,你可能会说服我们其中一位读过这篇文章的Mercurial贡献者来实现它。”
试试:

    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
根据您可能想要的是:

hg diff-r mainbranchrev-r mywork

他写道:

您可能认为“变更集是一个增量”,或者 类似的,这意味着Mercurial可以神奇地链接在一起 一堆不连续的三角洲来构建一个更大的三角洲 你的改变

事实上,Mercurial要简单得多。变更集实际上是一个 快照:表示快照状态的完整文件的完整集 提交时的项目。差别就是差别 在这两个快照之间。所以当你这样做的时候:

hg stat--rev'3408::3575和用户(mdiamond)而不是合并()

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

当您在开发分支上进行增量合并时,您 将您的工作与主线开发和Mercurial不可避免地纠缠在一起 还不够聪明,无法按照你的要求来解决问题。你的 最好的办法是将你的作品的开头与主要作品的开头进行比较 分支机构:

hg diff-r mainbranchrev-r我的工作

…这将显示您的所有工作,以及您必须进行的任何合并修复 做


谢谢@lazy badger,但我担心这会产生与
hg diff-r“branch('myBranch')-merge()不同的输出。
我仍然看到合并带来的变化。顺便说一句,你的意思是
hg diff-r“branch('myBranch')和!merge()”
,不是吗?@switey 1)
log
diff
是不同的命令,完全不同的命令2)当我写
log
的时候,我写了
log
,因为你必须得到变更集的列表,并测试集合中每个变更集的变更(在
log
)3)RTFM“形式逻辑”:
x-y
!=<代码>x和!y!!!(更改集在x中,但不在y中)!=(x中的变更集,而不是y中的变更集)-回到学校我的形式逻辑不是很好,但是在这个例子中,不要
x-y
x和!y
是否给出相同的结果?
myBranch
中有任何不是合并的内容吗?
@  517 (default)
|
| o  516 (my_branch)
| |
| o  515
| |
| o  514
|/
o  513