主题分支上的 Git diff,不包括同时发生的 merge 提交?

标签 git diff git-merge aggregation

假设我有以下情况:

    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/

相关文章:

git - 使用 git 比较来自两个提交的一个文件

git - 使用Dockerfile RUN克隆位桶存储库

git - 如何在 Git 中更新文件写入权限

Python difflib 的比率,quick_ratio 和 real_quick_ratio

git - 如何自定义 git 的 merge 提交消息?

git 从第一次提交中删除文件

xml - 比较忽略元素顺序的 XML

merge - 从命令行在 vim 中混合垂直和水平分割

git - 为什么Github不自动更新两个PR之间的文件比较?

GIT 损坏的文件 (<<<<<<<<HEAD)