在rebase之前和之后的Git diff分支忽略master中的更改

时间:2017-10-06 19:15:22

标签: git diff

我希望能够看到分支中的更改,因为我上次审核它,但忽略了同时发生的master中的更改。

     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,这使得差异变得更好

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

但是,它缺乏git可能提供的上下文 - 所以......有什么更好的吗?

2 个答案:

答案 0 :(得分:5)

因此解决方案是使用新的git range-diff

仅运行git range-diff c3af8fc5..7ccc4b49 4dfdabdd..301a443c,否则甚至更简单的git range-diff 7ccc4b49...301a443c都可能会起作用,除非您做了一些非常疯狂的调整。

为获得更好的解释,我引用了一些相关主题

答案 1 :(得分:3)

最简单的方法可能是:直观地比较差异

启动两个差异查看器,并在想要查看来自修订版本的内容时比较两个视图:

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

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

您只能专注于修改过的文件:

git diff --name-only B G

将列出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
)

您还可以尝试在本地计算机上B..G之上重新定位E,如果它没有触发太多冲突,那么请查看差异:

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