【发布时间】:2016-08-09 07:28:06
【问题描述】:
当我对我的代码运行测试时,我总是在 git 中拍摄代码的快照(使用 stash create)并将提交 ID 附加到测试中(确保将其放在 reflog 中以防止它成为垃圾集)。这样我以后可以轻松地准确检查导致该测试输出的代码。
但通常,我想将旧代码与我当前版本的代码进行比较。问题是我当前版本的代码已经重新基于 master 分支,所以一个 git diff 将显示数百次提交的组合差异。我目前所做的是两个 git 显示,然后是一个普通(非 git)差异,但这有一个巨大的缺点,即对于具有不同行号的每一行,这个行号被认为是一个差异。
那么当第二次提交被重新设置时,有没有一种简单的方法可以在两次提交之间进行差异?所以基本上,我正在寻找类似于在内部重新定位第一次提交,显示差异,然后摆脱该提交的内部重新定位版本的东西。当然,如果变基失败,那就这样吧,但在大多数情况下,变基只对我有用,所以在大多数情况下这仍然有用。
我想我可以自己写这个,但它似乎是一个常见的问题,所以我想知道这样的东西是否已经存在?
【问题讨论】:
-
git diff old...current是否没有显示您想要的内容(请注意那里的 3 个点,而不是 2 个) -
不,这显示了自旧的父提交以来对当前分支的所有更改(在我的情况下,旧的父是当前的祖先)。因此它还显示了数百个其他提交。它确实不同于两个点,但在我的情况下它相当于
git diff old^..current,这也不是我想要的。 -
@max630 是的,这就是我在第二段中描述的内容。它不太好用。与此同时,我发现了 interdiff 工具。这给出了比正常差异更好的结果。我正在考虑将其作为答案,但首先我将通过将
old挑选到new的父提交来将其与该方法进行比较。 Interdiff 有时无法注意到两个差异中相等的部分,所以我想git cherry-pick可能会更好。 -
是的,@max630 的回复是我发现的最好的。基本上你区分差异。我意识到 (Gnu?) diff 选项 --ignore-matching-lines 对清理 diffing diffs 产生的不可避免的垃圾有很大帮助。我对这个变体很幸运: % diff -U3 --ignore-matching-lines="^@@ "
标签: git