我正在寻找一种在某个时间点显示我的存储库中文件内容的方法。我使用以下命令:
$ 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的齿轮扔掉一把大扳手。
这似乎是使用branch@{date}
修订版规范的问题。如果我从1年前获取一个SHA1哈希并在其上运行相同的命令,它可以正常工作:
$ git show 8f6a0e7:X/Y/Z/main.h
所以也许我错误地指定了我的版本?
显然问题是revision by date relies on reflogs到期并且肯定不会在我的案件中回溯一年。
因此,我只看到大约4周前的文件状态(因为我的原始/主人的reflog没有超过这个)。
我原本以为重命名导致了这个问题,但事实证明这是我的refspec。所以实际上我的问题是错的:我知道如何在任何时间点对文件进行git show
而不管重命名,但是我希望能够使用相对时间戳来计算git基于提交时间戳而不是依赖于reflog。