【发布时间】:2017-10-06 19:15:22
【问题描述】:
我希望能够看到分支中的更改,因为我上次查看了它,但忽略了同时发生的 master 中的更改。
F - G H - I
/ /
A - B - C - D - E
我有两个提交范围c3af8fc5..7ccc4b49(由B - G 表示)和4dfdabdd..301a443c(由E - I 表示)。
想象一下,您正在为您的同事进行代码审查,您在本地查看他的分支,而您的 HEAD 现在指向 G。您进行代码审查并继续做其他事情。
一段时间过去了,新的提交出现在 master 中(C、D 和 E),您的同事已经解决了您审查中的 cmets。他压缩了对提交F 和G 的更改,因为他重命名了F 中引入的方法,并修复了G 中的用法。他还在 master 上重新建立了分支,以确保一切正常。
现在您想再次进行代码审查,但是您懒得再次对整个分支进行代码审查,因此您只想查看与上次相比发生了什么变化。您仍然在本地获取旧的 refs。你是做什么的?
您可以执行git-diff G I 之类的操作,但这也会向您展示 master 中发生了什么变化,而这对您毫无帮助。
您还可以在当前主服务器上重新设置旧的 refs,然后对它们进行比较。这可能会有所帮助,但也可能会出现很多冲突,这可能会使再次审查整个分支变得更加容易。
diff <(git-diff c3af8fc5...7ccc4b49) <(git-diff 4dfdabdd...301a443c)
它可以帮助我将注意力转移到某个地方,但它非常粗糙。
你知道解决这个问题的更好、更原生的方法吗?谢谢。
编辑:我刚刚discovered interdiff,这使得区分两个差异变得更好
interdiff <(git-diff -U100 c3af8fc5...7ccc4b49) <(git-diff -U100 4dfdabdd...301a443c) | colordiff
但是,它仍然缺少 git 可能提供的上下文 - 所以......还有什么更好的吗?
【问题讨论】:
-
Git 只能显示两次提交之间的差异。听起来你想要一个 diff 的 diff,所以这不是 Git 可以做的。
-
我知道,但是 git 有变化的上下文,它可以巧妙地生成两个差异的差异。
-
但是那会是什么样子呢?我什至无法直观地想到它。
-
我不知道,这就是我打开这个问题的原因:)
-
注意:语法
c3af8fc5...7ccc4b49意味着,对于git diff,它应该找到c3af8fc5和7ccc4b49的合并基,然后区分针对7ccc4b49提交(无论是什么)。这可能不是你想要的。请注意,git diff X..Y(两个点对三个点)的含义与git diff X Y完全相同,而git diff X...Y具有这种特殊的、仅区别的含义。