git commit的--date参数的格式是什么

时间:2013-11-02 13:24:32

标签: git command-line-arguments

我需要覆盖提交git的日期,所有文档都指向--date参数,但是然后留下一个没有线索的适当格式。我已经尝试了我能想到的每一个排列,并且我得到了“致命的:无效的日期格式:”每个人的错误。

4 个答案:

答案 0 :(得分:62)

Git 2.6 +(2015年第3季度)添加了新选项。

commit e4f031e(2015年6月30日)和commit aa1462ccommit a5481a6commit b7c1e11(2015年6月25日)Jeff King (peff)(由Junio C Hamano -- gitster --合并于commit d939af1,2015年8月3日)

  

介绍“格式”日期模式

     

这会直接将格式提供给strftime   除了更灵活一点,主要优点是你的系统   strftime可能会更多地了解您的语言区域的首选格式(例如,如何拼写星期几)。

     

--date=format:...将格式...提供给您的系统strftime   使用--date=format:%c以系统区域设置的首选格式显示日期   有关格式占位符的完整列表,请参阅strftime手册。

Davide Cavestro建议in the comments示例:

git commit -m "Test" --date=format:relative:5.hours.ago 

原始答案(2014年中)

--date选项(在2009年12月的commit 02b47cd中为git1.7.0引入)使用与GIT_AUTHOR_DATE相同的格式,并在commit 96b2d4f中测试了日期格式:

在那里你可以看到接受的各种格式:

  • rfc2822:Mon, 3 Jul 2006 17:18:43 +0200
  • iso8601:2006-07-03 17:18:43 +0200
  • local:Mon Jul 3 15:18:43 2006
  • 短:2006-07-03(不在1.9.1中,在2.3.0中有效)
  • 亲戚:见commit 34dc6e7

    5.seconds.ago, 
    2.years.3.months.ago, 
    '6am yesterday'
    
  • raw:见commit 7dff9b3(git 1。6。2,2009年3月)
    内部原始git格式 - 自纪元加时区后的秒数 (换句话说:'date +"%s %z"'格式)

  • 默认:Mon Jul 3 17:18:43 2006 +0200

ADTC询问并回答in the comments

  

它是否接受2006-07-03 15:18:43本地?

  

是的确有效,它会自动占用当地时区   使用这种格式,我不需要打扰一周中的哪一天(SunMon等。)

答案 1 :(得分:8)

日期格式未记录在Documentation/date-formats.txtman git commit),而且非常" humanishely"解析。

唯一有效的方法是阅读date.c下的来源并尝试一下。

VonC在2.3.0上未提及的要点:

  • 仅根据位数解析数字:

    • 2位数:19YY,YY> = 73,当前月份,日期和时间。错误或当前日期。

    • 4位:YYYY,YYYY> = 1973,< = 2099

    • > 8位数到一个小的限制(TODO?):UNIX时间(自1970年以来的秒数)

  • @<digits> +0000:UNIX时间。

    这似乎是直接输入UNIX时间的最佳方式。

    2 ** 64 - 2(TODO为什么不是-1?)是不会导致提交错误的最大值。邮票存储在C长。

    git log显示非常大的值(在2^55 TODO附近的某处?)为1970,即使git cat-file -p HEAD显示存储了正确的数字,所以它似乎是一个限制日期转换。

    对于大于2**63 - 1的任何内容,最大的正数签名为long,试图推送到GitHub失败,date causes integer overflowA commit at that date on GitHub(GitHub cannot show really large dates for some reason

    VonC指出,这是一个耻辱,因为它阻止负日期Is it possible to set a git commit to have a timestamp prior to 1970?,可用于将旧软件迁移到Git。

  • tea:今天17点: - )

答案 2 :(得分:1)

下面的缩写形式都可以使用:

  1. <month>/<day>
  2. <month>-<day>
  3. <day>.<month>

如果没有歧义,即<day>大于12,则<month> <day>的顺序无关紧要,并且分隔符可以是'{ {1}},“ /”或“ -”。

否则,请使用'.'作为.的分隔符,并使用'{{11}}'或'<day>.<month>'作为/的分隔符。

因此“ -”将被视为“ 7月1日”,“ <month>-<day>”将被视为“ 1月7日”。

请参见the related commit from v1.3.0

When the separator is '.', we prefer dd.mm.yyyy over
mm.dd.yyyy; otherwise mm/dd/yy[yy] takes precedence over
dd/mm/yy[yy].

这也适用于接受日期输入的其他命令,例如:从2月4日开始显示日志:

1.7

答案 3 :(得分:0)

简单的例子:

GIT_AUTHOR_DATE='2015-04-19 17:18:43 +0200' GIT_COMMITTER_DATE='2015-04-19 17:18:43 +0200' git commit -m 'Commit message'