Git 具有两个不同父提交的两个提交之间的差异

Git 具有两个不同父提交的两个提交之间的差异,git,Git,当我对代码运行测试时,我总是在git中拍摄代码的快照(使用stash create)并将提交ID附加到测试(确保将其放在reflog上以防止被垃圾收集)。这样我以后就可以很容易地检查到底是什么代码导致了测试输出 但通常,我希望将旧代码与当前版本的代码进行比较。问题是,我当前版本的代码已经在主分支上重新设置了基础,因此git diff将显示数百次提交的组合差异。我现在做的是两个git显示,然后是一个正常(非git)差异,但这有一个巨大的缺点,即对于具有不同行号的每一行,该行号被认为是一个差异 那么

当我对代码运行测试时,我总是在git中拍摄代码的快照(使用stash create)并将提交ID附加到测试(确保将其放在reflog上以防止被垃圾收集)。这样我以后就可以很容易地检查到底是什么代码导致了测试输出

但通常,我希望将旧代码与当前版本的代码进行比较。问题是,我当前版本的代码已经在主分支上重新设置了基础,因此git diff将显示数百次提交的组合差异。我现在做的是两个git显示,然后是一个正常(非git)差异,但这有一个巨大的缺点,即对于具有不同行号的每一行,该行号被认为是一个差异

那么,当第二次提交被重定基础时,有没有一种简单的方法来区分两次提交?因此,基本上,我在寻找类似于在内部重新调整第一次提交的东西,显示差异,然后摆脱该提交的内部重新调整版本。当然,如果回扣失败了,那就这样吧,但在大多数情况下,回扣对我来说很有效,所以在大多数情况下,这仍然是有用的


我想我可以自己写,但这似乎是一个常见的问题,所以我想知道这样的东西是否已经存在?

我不知道如何在git中直接实现这一点

但是按照你的建议去做,通过写一个小脚本来做一个“幕后”的重基,应该可以很好地工作

顺便说一句,我会在这里放置一个标签,而不是使用藏品


最后,您可能希望更新此问题的标题,以提及
rebase

是否
git diff old…current
未显示您想要的内容(注意此处的3个点,而不是2个点)否,它显示自old的父提交以来对current的分支所做的所有更改(在我的示例中,old的父是current的祖先)。因此,它还显示了数百个其他提交。它确实不同于两个点,但在我的情况下,它相当于
git diff old^..current
,这也不是我想要的。@max630是的,这是我在第二段中描述的。它不太管用。与此同时,我找到了interdiff工具。这比正常差异给出了更好的结果。我正在考虑将其作为一个答案,但首先我要将其与方法进行比较,方法是将
选择到
的父提交上。Interdiff有时无法注意到两个差异中相等的部分,因此我认为git cherry pick在这方面可能会更好。是的,@max630的响应是我发现的最好的。基本上你可以区分不同。我意识到(Gnu?)diff选项——忽略匹配线在清理diff产生的不可避免的垃圾方面有很大帮助。我很幸运使用了这个变量:%diff-U3--忽略匹配行=“^@@@”我没有使用隐藏,我使用的是
git stash create
,它以两次提交的形式创建索引和工作区的快照。这就像手动创建这些提交,然后执行重置,但git已经内置了这种功能。标记与此无关:它是一种“记住”某个提交的方法,但我的问题是创建提交,而不是记住它,因为我已经通过外部保存其提交ID来记住它。它确实可以防止垃圾收集,但这正是我使用reflogs的目的,它同样可以工作,并允许像
test@{1周前}
这样的事情。