我正在尝试从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天前的代码替换)
答案 0 :(得分:3)
语法@{XXX.days.ago}
指的是reflog,Git保留的本地历史记录以及历史记录,例如git log
。因此,@{14.days.ago}
表示“此HEAD
指向此存储库,在我的计算机上的”,而不是“14天前的提交”(可能是在另一台计算机上的另一个存储库上。)
您可以改为:
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个相邻的行,向上和向下,这样对于每次提交,我们捕获带有哈希的行和第一行提交消息。