根据日期

时间:2018-05-23 12:08:35

标签: git git-checkout

我正在尝试从git中检索旧提交,因为与另一个项目(共享此代码)不兼容。 git repo是OpenZWave。

我在SO上发帖子说要发出命令:

git checkout @{14.days.ago}

但结果是:

warning: Log for '' only goes back to Wed, 23 May 2018 08:02:05 -0400.
HEAD is now at 77a05ed... Update hs-ms100plus.xml

我无法弄清楚错误的原因 - 显然有更旧的提交而不是今天的约会。这个命令有什么问题? (并且该命令会导致我的克隆被14天前的代码替换)

2 个答案:

答案 0 :(得分:3)

语法@{XXX.days.ago}指的是reflog,Git保留的本地历史记录以及历史记录,例如git log。因此,@{14.days.ago}表示“此HEAD指向此存储库,在我的计算机上的”,而不是“14天前的提交”(可能是在另一台计算机上的另一个存储库上。)

您可以改为:

  • 获取提交ID,例如
git log --before 14.days.ago -1
  • 结帐此提交:
git checkout 

答案 1 :(得分:2)

为什么不起作用?

git checkout @{14.days.ago}尝试根据reflog(过去指向的所有提交HEAD的记录)在给定时间恢复特定存储库的本地状态。如果这是一个新的克隆,它将无法正常工作。

所以,好的语法不起作用,你需要在一年前找到一些提交,并通过哈希检查出来。怎么做?

如何查找一年前提交的提交?

我只是尝试在gitk中找到正确的提交,滚动一年的提交在大多数情况下都不应该成为问题。但是,您也可以grep日志,如下所示:

git log --date=iso | grep -C3 2017-05-

或者,如果您知道在特定日期提交了提交,请执行以下操作:

git log --date=iso | grep -C3 2017-05-23

简短说明:

  • --date=iso确保日期以轻松的方式显示。
  • -C3选项使grep包括3个相邻的行,向上和向下,这样对于每次提交,我们捕获带有哈希的行和第一行提交消息。