如何在指定修订后重命名的文件上“git show”?

时间:2014-12-30 19:32:02

标签: git

我正在寻找一种在某个时间点显示我的存储库中文件内容的方法。我使用以下命令:

$ git show "origin/master@{1 year ago}:A/B/C/main.h"

但是,1年前' main.h'存在于X/Y/Z/main.h。所以,如果我改为适应这个:

$ git show "origin/master@{1 year ago}:X/Y/Z/main.h"

这显示了我的文件内容,但它该时间点的正确内容(我还没有验证实际显示的内容版本,但似乎最近......也许是重命名后内容的第一个版本。重命名令人困惑git show,我不知道如何让它发挥作用。

我发现this SO question似乎有类似的问题。如果可能的话,我希望git show为此而不是git log工作(因为日志只显示带有-p的差异,我希望看到完整的内容)

任何人都可以帮我找出正确的方法吗?似乎重命名会给Git的齿轮扔掉一把大扳手。

更新1

这似乎是使用branch@{date}修订版规范的问题。如果我从1年前获取一个SHA1哈希并在其上运行相同的命令,它可以正常工作:

$ git show 8f6a0e7:X/Y/Z/main.h

所以也许我错误地指定了我的版本?

更新2

显然问题是revision by date relies on reflogs到期并且肯定不会在我的案件中回溯一年。

因此,我只看到大约4周前的文件状态(因为我的原始/主人的reflog没有超过这个)。

我原本以为重命名导致了这个问题,但事实证明这是我的refspec。所以实际上我的问题是错的:我知道如何在任何时间点对文件进行git show而不管重命名,但是我希望能够使用相对时间戳来计算git基于提交时间戳而不是依赖于reflog。

0 个答案:

没有答案