我试图在Git中显示最后一次提交,但我需要特殊格式的日期。

我知道log pretty格式%ad尊重——date格式,但我能找到的唯一——date格式是“short”。我想知道其他的,以及我是否可以创建一个自定义的,如:

git -n 1 --date=**YYMMDDHHmm** --pretty=format:"Last committed item in this release was by %%an, %%aD, message: %%s(%%h)[%%d]"

当前回答

git log -n1 --format="Last committed item in this release was by %an, `git log -n1 --format=%at | awk '{print strftime("%y%m%d%H%M",$1)}'`, message: %s (%h) [%d]"

其他回答

git log -n1 --format="Last committed item in this release was by %an, `git log -n1 --format=%at | awk '{print strftime("%y%m%d%H%M",$1)}'`, message: %s (%h) [%d]"

其他的是(来自git帮助日志):

--date=(relative|local|default|iso|rfc|short|raw)
  Only takes effect for dates shown in human-readable format,
  such as when using "--pretty".  log.date config variable
  sets a default value for log command’s --date option.

--date=relative shows dates relative to the current time, e.g. "2 hours ago".

--date=local shows timestamps in user’s local timezone.

--date=iso (or --date=iso8601) shows timestamps in ISO 8601 format.

--date=rfc (or --date=rfc2822) shows timestamps in RFC 2822 format,
  often found in E-mail messages.

--date=short shows only date but not time, in YYYY-MM-DD format.

--date=raw shows the date in the internal raw git format %s %z format.

--date=default shows timestamps in the original timezone
  (either committer’s or author’s).

据我所知,没有内置的方法来创建自定义格式,但您可以使用一些shell魔法。

timestamp=`git log -n1 --format="%at"`
my_date=`perl -e "print scalar localtime ($timestamp)"`
git log -n1 --pretty=format:"Blah-blah $my_date"

这里的第一步为您提供一个毫秒时间戳。您可以随心所欲地更改第二行以格式化时间戳。这个示例为您提供了类似于——date=local的内容,其中有一个填充的日期。


如果你想要永久的效果,而不是每次都输入这个,试试吧

git config log.date iso 

或者,影响你所有的git使用此帐户

git config --global log.date iso

您可以使用字段截断选项来避免使用太多%x08字符。例如:

git log --pretty='format:%h %s%n\t%<(12,trunc)%ci%x08%x08, %an <%ae>'

等价于:

git log --pretty='format:%h %s%n\t%ci%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08, %an <%ae>'

而且对眼睛也比较好看。

更好的是,对于这个特殊的例子,使用%cd将遵守——date=<格式>,所以如果你想要YYYY-MM-DD,你可以这样做,完全避免%<和%x08:

git log --date=short --pretty='format:%h %s%n\t%cd, %an <%ae>'

我只是注意到这篇文章相对于最初的帖子有点循环,但我还是把它留着,以防其他人带着和我一样的搜索参数来到这里。

我也需要同样的东西,并发现以下方法对我有用:

git log -n1 --pretty='format:%cd' --date=format:'%Y-%m-%d %H:%M:%S'

——date=format格式化日期输出,其中——pretty告诉打印什么。

注意“date=iso”格式:它并不是iso 8601。 参见commit "466fb67" from Beat Bolli (bbolli),用于Git 2.2.0(2014年11月)

pretty:提供严格的ISO 8601日期格式

Git's "ISO" date format does not really conform to the ISO 8601 standard due to small differences, and it cannot be parsed by ISO 8601-only parsers, e.g. those of XML toolchains. The output from "--date=iso" deviates from ISO 8601 in these ways: a space instead of the T date/time delimiter a space between time and time zone no colon between hours and minutes of the time zone Add a strict ISO 8601 date format for displaying committer and author dates. Use the '%aI' and '%cI' format specifiers and add '--date=iso-strict' or '--date=iso8601-strict' date format names.

请看这个帖子进行讨论。