git 的多分支差异?

Multi-branch diff with git?

有没有一种简单的方法可以通过 git 获取多个(两个以上)分支之间的差异? (有点像 "octopus diff"?)

情况是有一个分支(称为分支 A)是合并多个其他分支(称为 B 和 C)以及其他修改的结果。 (分支 A 从分支 B 分出,有一些本地修改,然后分支 C 被合并,接着是更多的本地修改,然后更多的本地修改和重新合并以包括 B 和 C 分支上的更新。)

我想做的是查看分支 A 独有的所有本地更改 - 也就是说,查看对分支 A 进行了哪些更改,但不在分支 B 或分支 C 上。

(发布一个选项,它没有完全回答我的问题,但我在研究过程中感到困惑。)

一种可能性是使用 git log 的 -p(补丁)选项,它可以采用多个分支标签来包含和排除:

git log -p branch_A ^branch_B ^branch_C

这不会像 git diff 那样提供单一的更改摘要,而是为分支 A 中包含但不在分支 B 或 C 中的每个提交提供单独的更改。

虽然不太适合全面了解分支 A 引入的更改,但当您尝试从分支 A 中挑选更改时,这个逐个提交的摘要可能更有用。

从 B 分支 "bPlusC",然后合并 "C"。将其与 "A".

进行比较
git checkout -b bPlusC B
git merge --no-ff C
git checkout A
git diff bPlusC..HEAD

编辑: 基于 R.M. 的评论:

如果 B 或 C 有不在 A 中的提交,使用这个:

git checkout -b bPlusC $(git merge-base A B)
git merge --no-ff $(git merge-base A C)
git checkout A
git diff bPlusC..HEAD