如何获得这两个git提交之间的interdiff?

Aje*_*i32 6 git

我试图在git中查看同一提交的两个修订版之间的区别.差异的差异,基本上.从我到目前为止所读到的,这被称为"interdiff".我已经阅读了几个关于如何创建git补丁的interdiffs的教程,但是我无法让这些方法在我的特定情况下工作.

所以这是设置.我有两个不同的分支,每个分支略有不同:

* 29e734f - (origin/feature_branch, new_commits) New commit 3 (69 minutes ago) <Ajedi32>
* b22ebea - New commit 2 (89 minutes ago) <Ajedi32>
* 09d42c2 - New commit 1 (2 hours ago) <Ajedi32>
| * 467e08f - (old_commits) Old commit 3 (4 weeks ago) <Ajedi32>
| * f2bf1cb - Old commit 2 (4 weeks ago) <Ajedi32>
| * 34a2187 - Old commit 1 (4 weeks ago) <Ajedi32>
|/  
*   1b05a4a - (origin/base, base) Base commit (5 weeks ago) <Ajedi32>
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想找到"旧提交3"和"新提交3"之间的interdiff.我已经尝试从这两个提交创建一个补丁文件并通过该interdiff实用程序运行它们,但我得到的只是:

1 out of 2 hunks FAILED -- saving rejects to file /tmp/interdiff-1.Kgwx8u.rej
interdiff: Error applying patch1 to reconstructed file
Run Code Online (Sandbox Code Playgroud)

我不太确定这意味着什么,所以我现在有点卡住了.我从哪里开始?

注:我我git diff old_commits new_commits这里.我不希望输出中包含提交1和2的修订版.

twa*_*erg 5

也许是这样的:

git log -p -1 new_commits > patch.new
git log -p -1 old_commits > patch.old
diff patch.old patch.new
Run Code Online (Sandbox Code Playgroud)

或者对于简洁的单行(in bash):

diff <(git log -p -1 old_commits) <(git log -p -1 new_commits)
Run Code Online (Sandbox Code Playgroud)


Aje*_*i32 5

Git 2.19引入了一个新命令,git range-diff它执行以下操作:

git-range-diff-比较两个提交范围(例如,分支的两个版本)

git range-diff [--color=[<when>]] [--no-color] [<diff-options>] [--no-dual-color]
               [--creation-factor=<factor>]\
               ( <range1> <range2> | <rev1>...<rev2> | <base> <rev1> <rev2> )
Run Code Online (Sandbox Code Playgroud)

描述

此命令显示补丁程序系列的两个版本之间的区别,或更一般地,显示两个提交范围(忽略合并提交)的区别。

为此,它首先从彼此对应的两个提交范围中查找成对的提交。当两个补丁之间的差异(即作者信息,提交消息和提交差异)与补丁大小相比相当小时,则认为两个提交相对应。有关Algorithm详情,请参见下文。

最后,以第二个提交范围的顺序显示匹配的提交列表,并且在显示所有先祖之后立即插入不匹配的提交。

因此,在您的情况下:

git range-diff base old_commits new_commits
Run Code Online (Sandbox Code Playgroud)

会自动将old_commits分支中的提交与new_commits分支中的提交进行匹配,并显示每个提交之间差异的摘要。

或者,如果您只想从每个分支的最后一次提交中进行更改,则可以运行:

git range-diff old_commits~..old_commits new_commits~..new_commits
Run Code Online (Sandbox Code Playgroud)

有关range-diff的更多信息,请参见官方文档