在git中显示两次提交的非合并差异

在git中显示两次提交的非合并差异,git,diff,Git,Diff,我有两个承诺,其中一个是另一个的祖先。(它们恰好是分支的起点和终点。我认为这并不重要,但如果重要的话,我会将其包括在内) 我希望看到两次提交之间的差异,但不包括在合并提交期间所做的更改(即,具有多个父级的所有提交),这些更改是在两次提交之间进行的。(基本上,我希望对分支进行任何“真正”的提交,不包括合并。) 这可能吗?如果是,你是如何做到这一点的 如有必要,假设在合并提交期间没有解决冲突。。。但是,对于一个能够优雅地处理它们的解决方案来说,这是一个额外的分数。您的问题有点含糊不清,但我认为您希望

我有两个承诺,其中一个是另一个的祖先。(它们恰好是分支的起点和终点。我认为这并不重要,但如果重要的话,我会将其包括在内)

我希望看到两次提交之间的差异,但不包括在合并提交期间所做的更改(即,具有多个父级的所有提交),这些更改是在两次提交之间进行的。(基本上,我希望对分支进行任何“真正”的提交,不包括合并。)

这可能吗?如果是,你是如何做到这一点的


如有必要,假设在合并提交期间没有解决冲突。。。但是,对于一个能够优雅地处理它们的解决方案来说,这是一个额外的分数。

您的问题有点含糊不清,但我认为您希望这样

git log --no-merges -p branch-start..branch-end
我不知道--no merges-o选项,但这里有另一个解决方案(我想合并是从master完成的):


如果您的合并全部来自同一个分支(例如
master
),或者全部包含在另一个分支中,则可以使用from

假设您有一棵如下所示的树:

         x---y-+-z-+-branch
        /     /   /
---a---b---c-+-d-+-e---master
您要比较的两个提交是
b
分支
。然后运行

git diff master...branch
将显示分支上所做的所有更改(
x,y,z
),不包括主分支上的所有更改(
c,d,e
,合并)。请注意,这也会忽略对尚未在分支中的主节点所做的任何更改

从文档中:

git diff[--options]提交…提交[--][…]…​]

此表单用于查看包含和直到第二次提交的分支上的更改,从两者的共同祖先开始 提交。“git diff A…B”相当于“git diff$(git merge base A B)B”


以下是我如何将签出的分支与主分支进行比较,不包括合并提交期间所做的更改。我更喜欢使用Meld的目录模式

# if you've never setup Meld as your difftool
sudo apt install meld
git config --global diff.tool meld

# the command to see the differences
git difftool -d --no-merges master

您也可能更喜欢使用
--第一个父项
。-p是票证,当与--no merges组合时。谢谢!很遗憾您不能对cached/current(未提交)执行此操作(创建范围)…您可以使用
git diff$(git merge base branchA current branch)获得整个差异
.Sulk!另请看:此命令行也满足了我的问题…顺便说一句,我们如何使用GitHub pull请求视图而不是此命令行?请澄清:您希望每个提交都有一个单独的差异,而不是合并提交,还是您希望有其他差异?@Autocracy:我已经编辑了它,希望澄清我在寻找什么。让我来知道它是否仍然没有意义。
# if you've never setup Meld as your difftool
sudo apt install meld
git config --global diff.tool meld

# the command to see the differences
git difftool -d --no-merges master