Git 如何使用cygwin日期返回时间,使用静态秒值返回日期

Git 如何使用cygwin日期返回时间,使用静态秒值返回日期,git,date,cygwin,sync,seconds,Git,Date,Cygwin,Sync,Seconds,我正在使用git,试图同步到去年每个月的第一次提交。我希望能够在每月的第一天,第二天,一个月一个月地回去。或者至少从某个恒定的“秒”值。到目前为止,我有: $(git版本列表--在“$(日期-d”$(日期+%Y-%m-01)-$i个月+%Y-%m)-01”-n 01头之前) 这显然不包括恒定的秒值。目前,运行这个脚本,然后在一小时后再次运行它,会返回两个不同的sha1,因为它要追溯到我运行脚本的确切时间x个月前。无论何时运行此脚本,我都希望返回的sha1是相同的。这有意义吗?有什么想法吗?首先,

我正在使用git,试图同步到去年每个月的第一次提交。我希望能够在每月的第一天,第二天,一个月一个月地回去。或者至少从某个恒定的“秒”值。到目前为止,我有:

$(git版本列表--在“$(日期-d”$(日期+%Y-%m-01)-$i个月+%Y-%m)-01”-n 01头之前)


这显然不包括恒定的秒值。目前,运行这个脚本,然后在一小时后再次运行它,会返回两个不同的sha1,因为它要追溯到我运行脚本的确切时间x个月前。无论何时运行此脚本,我都希望返回的sha1是相同的。这有意义吗?有什么想法吗?

首先,您的命令中有一个打字错误。它必须是
--before=“$(…
”,您缺少
=

date
的行为在这里不是问题。
date+%Y-%m-01
将返回类似
2011-10-01
的字符串,不包含额外的时间信息。因此第二次日期调用将减少
$i
月数,还将返回类似
2011-09-01的格式
。除了该字符串之外,没有其他信息作为参数值
--before=
传递给
git rev list

<> P>有一些事情你必须考虑使用<代码> GIT Rev列表 >:

  • 当使用
    HEAD
    时,您总是引用当前的分支。因此,例如,当您签出一个获得的提交ID时,您的HEAD将更改。您可能希望使用
    master
    或任何其他分支名称作为引用
  • Git没有提交的时间顺序。您可以在9月1日提交后的8月1日分层编写提交。这将导致在使用
    --before
    --after
    参数时混淆输出,因为它们依赖于提交者字段的时间戳trong>
  • 提交者字段的时间戳也可能有误导性。当您的分支没有线性历史记录时,很难判断在历史上的某个时刻提交是否是存储库中分支的一部分。作者可能在提交X个月后推送/合并了他的分支,因此ot看不到该分支她的
  • 考虑到以上所述,以下命令对我有效:

    $(git rev list--after=“$(日期-d”$(日期+%Y-%m-01)-$i个月+%Y-%m)-01 00:00:00”master | tail-n 1)


    这将返回给定月份第一次提交后的第一次提交ID。(此提交不一定是在该月份进行的,可能该月份没有提交。)

    谢谢Scolytus,对学习者来说非常有洞察力。我将尝试使用
    master