假设我有以下情况:
B---D---F---G topic
/ /
--A---C---E master
出于代码审查的目的,我想从提交 A 到提交 G 中提取差异,但不包括发生在 master 分支上的提交 E 和 C,也不包括作为 merge 提交的提交 F。
换句话说,我想生成一个差异,其中包含从 F 到 G 的更改,并将这些更改与从 A 到 D 的更改聚合。
换句话说,我希望审查差异仅包含我在主题分支中所做的更改,而不包括在此期间发生的一堆来自 master 的代码。
这可能吗?如果 git 无法处理此类“差异聚合”,如果有人可以提供一些关于某些外部命令如何执行此操作的指示(以便我可以尝试编写一个可以解决问题的 bash 脚本),我将非常感激。
最佳答案
Karl 的回答具有误导性:
git diff
从不在适当的范围内工作(即多次提交),仅在两次 提交之间工作!
范围语法对 git diff
有特殊意义.
git diff E..G
始终等于 git diff E G
(和
git diff E...G
等于git diff E G
在这种情况下,因为 E 是两者之间的 merge 基础)。
git diff master...topic
是您在此和一般情况下想要的:它向您显示主题分支的所有更改,将其与上次 merge 基础进行比较(即,将其与上次 merge 时的 master 进行对比) ,忽略 master 中所有后来的更改,这些更改无论如何都不在您的主题分支中)。
注意:不幸的是(巧合?)x..y
的影响在 git log
等最好用 x...y
表示在 git diff
反之亦然!
关于主题分支上的 Git diff,不包括同时发生的 merge 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7488956/