我们重命名了一个文件,其中git log --follow my/new-file
正确显示了重命名前后的更改。
但是这个命令不能显示以前的版本:git show <rev>:my/new-file
.
我们必须跑git show <rev>:my/old-file
。
有没有办法可以使用 my/ new -file 而不是 my/ old -file 运行此命令?
简短的回答很简单,如果不愉快的话:不。
这里的问题是,git show
首先解决要显示的内容(通过git rev-parse
,或多或少),然后显示它,并且git rev-parse
不会遍历历史尝试跟踪文件并从每次提交到其父级进行差异以查看它是否可以找到看起来像重命名的东西。
但是,使用git log --follow
确实可以做到这一点:查看与父提交相比的每个提交,生成差异,并查看生成的差异是否表明当时可能my/new-file
已重命名my/old-file
。如果是这样,它会调整其下一个较旧的检查以使用my/old-file
.
Git 可能会使用一个单独的程序(或模式 in git log
)来查看是否在某些提交对中重命名了某些文件,如果是,则提供其他 git 实用程序(如git show
. 然后你可以说:git show $(git whatwas HEAD <rev> my/new-file)
,或类似的东西(取决于这个假设git whatwas
命令的细节)。您可以使用我在此答案whatwas
中概述的技术编写一个基本上执行此操作的脚本。我确信在这个过程中会出现各种烦人的细节,但这个理论似乎是合理的。