Git diff分支在分配之前和之后忽略大师的变化

问题描述:

我希望能够看到分支的变化,因为我上次审查它,但忽略了在此期间发生的主变更。Git diff分支在分配之前和之后忽略大师的变化

 F - G  H - I 
    /  /
A - B - C - D - E 

我有两个提交范围c3af8fc5..7ccc4b49(由B - G表示)和4dfdabdd..301a443c(由E - I表示)。


试想一下,你正在做代码审查你的同事,你签上自己的本地分支,你HEAD现在指向G。您将执行代码审查并继续进行其他操作。

经过一段时间,主提交中出现了新的提交(CDE),并且您的同事已解决您评论中的评论。他压扁FG提交的更改,因为他将F中引入的方法重新命名并将其用法固定为G。他还重新启动了主人的分支,以确保一切正常。

现在,您想要再次进行代码审查,但您又懒得再次对整个分支进行代码审查,因此您只想查看上次更改的内容。你仍然有本地获取的旧文件。你是做什么?

你可以做一些像git-diff G I这样的事情,但是这也会告诉你什么改变了主人,根本没有任何帮助。

您也可以重新绑定当前主控制器上的旧参考,然后对它们进行比较。这可能会有所帮助,但也可能会有很多冲突,这可能会使得再次审查整个分支变得更加容易。


我已经试过diffing patches

diff <(git-diff c3af8fc5...7ccc4b49) <(git-diff 4dfdabdd...301a443c) 

它帮助我的地方我的注意力,但它是非常粗糙的。

你知道有更好的,更原始的方法来解决这个问题吗?谢谢。


编辑:我刚刚discovered interdiff,这使得版本比较2点的diff好得多

interdiff <(git-diff -U100 c3af8fc5...7ccc4b49) <(git-diff -U100 4dfdabdd...301a443c) | colordiff 

但尽管如此,它缺乏的git可能提供上下文 - 所以......有什么好?

+0

Git只能显示两个提交之间的差异。这听起来像你想要差异的差异,所以这不是Git可以做的事情。 – poke

+0

我知道,但git具有更改的上下文,它可以巧妙地生成两个diff的差异。 –

+0

但是,甚至会是什么样子?我甚至无法直观地想到它。 – poke

最简单的方法可能是:视觉上比较的diff

火了两个差异的观众,当你想看到从基期的修订随之而来的两种观点比较:

# view the "old" patch : 
git difftool -d B G 

# view the "new" patch : 
git difftool -d H I 

您只能关注修改过的文件:

git diff --name-only B G 

将列出修改的名称ED B和G之间文件

您可以只针对修改后的文件使用,例如:

# compare G and I, 
# looking only at files modified between B and G, or between E and I : 
git difftool -d G I -- $(
    git diff --name-only B G; git diff --name-only E I 
) 

您也可以尝试在本地机器上的E上衍合B..G,如果它不” t触发太多的冲突,然后看差异:

git checkout G 

# as an option, you can make a temporary branch : 
git checkout -b wip/G 

# rebase on the tip of 'master' : 
git rebase E 

# look at the diff between "rebased G" and I 
git difftool -d wip/G I