代码之家  ›  专栏  ›  技术社区  ›  TSG

根据日期从Git签出旧的提交

  •  0
  • TSG  · 技术社区  · 6 年前

    由于与另一个项目(共享此代码)不兼容,我正试图从Git中检索旧的提交。Git回购是OpenzWave。

    我在上面找到了一个帖子,上面说要发布命令:

    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 回复  |  直到 6 年前
        1
  •  3
  •   Matthieu Moy    6 年前

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

    您可以改为:

    • 获取提交ID,例如
    git log --before 14.days.ago -1
    
    • 签出此提交:
    git checkout 
    
        2
  •  2
  •   Frax    6 年前

    为什么不起作用?

    git checkout @{14.days.ago} 尝试还原 特定存储库的本地状态 在给定的时间,基于reflog(过去所有提交头的记录)。如果这是一个新的克隆,它就不会工作。

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

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

    我只是试着找到合适的承诺 gitk 在大多数情况下,滚动一年的提交不应该是一个问题。但是,您也可以对日志进行grep,如下所示:

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

    或者,如果您知道在特定日期提交了提交,如下所示:

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

    简短说明:

    • --date=iso 确保日期以易于识别的方式显示。
    • -C3 期权 grep 包括3个相邻的行,向上和向下,这样对于每个提交,我们用哈希和提交消息的第一行捕获该行。