git show 查看重命名文件的先前版本?

Mar*_*eon 6 git git-show

我们重命名了一个文件,其中git log --follow my/new-file正确显示重命名前后的更改。

但此命令无法显示先前版本:git show <rev>:my/new-file

我们必须跑git show <rev>:my/old-file

有没有办法可以使用 my/ new -file 而不是 my/ old -file 运行此命令?

tor*_*rek 5

简短的答案很简单,尽管令人不快:不。

这里的问题是,git show首先解决要显示的内容(通过git rev-parse或多或少),然后显示它,并且git rev-parse不会遍历历史记录尝试跟踪文件并从每个提交到其父级进行比较以查看它是否可以找到看起来像重命名的内容。

然而,使用git log --follow恰恰可以做到这一点:查看每个提交与父提交的比较,生成差异,并查看生成的差异是否表明该提交可能my/new-filemy/old-file在当时重命名的。如果是这样,它会调整其下一个较旧的检查以与 一起使用my/old-file

Git 也许可以使用一个单独的程序(或 中的模式git log)来查看某些文件是否在某些提交对中被重命名,如果是,则提供其他 git 实用程序(如git show. 然后你可以说:git show $(git whatwas HEAD <rev> my/new-file),或类似的东西(取决于这个假设命令的细节git whatwas)。您可以编写一个脚本,使用我在这个答案whatwas中概述的技术来基本上执行此操作。我确信这个过程中会出现各种烦人的细节,但这个理论似乎是合理的。