我试图在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 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]"
当前回答
date -d @$(git log -n1 --format="%at") +%Y%m%d%H%M
请注意,这将转换为您的本地时区,以防这对您的用例很重要。
其他回答
格式选项%ai是我想要的:
%ai:作者日期,类似ISO 8601的格式
--format="%ai"
在花了很长时间寻找一种方法来让git日志以YYYY-MM-DD格式输出日期,以一种更少的方式工作后,我想出了以下格式:
%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08
随着开关——date=iso。
这将以ISO格式(长格式)打印日期,然后打印14倍的退格字符(0x08),在我的终端中,这将有效地删除YYYY-MM-DD部分之后的所有内容。例如:
git log --date=iso --pretty=format:'%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%aN %s'
这将给出如下内容:
2013-05-24 bruno This is the message of the latest commit.
2013-05-22 bruno This is an older commit.
...
我所做的是在上面的格式上做了一些调整,创建了一个名为l的别名。它在左边显示提交图,然后是提交的散列,然后是日期、短名、引用名和主题。别名如下(在~/.gitconfig中):
[alias]
l = log --date-order --date=iso --graph --full-history --all --pretty=format:'%x08%x09%C(red)%h %C(cyan)%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08 %C(bold blue)%aN%C(reset)%C(bold yellow)%d %C(reset)%s'
您可以使用字段截断选项来避免使用太多%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 2.7 (Q4 2015)将引入-local作为一条指令。 这意味着,除了:
--date=(relative|local|default|iso|iso-strict|rfc|short|raw)
你还会有:
--date=(default-local|iso-local|iso-strict-local|rfc-local|short-local)
-local后缀不能与raw或relative一起使用。参考。
您现在可以使用本地时区请求任何日期格式。 看到
提交99264 e9, 提交db7bae2, 提交dc6d782, 提交f3c1ba5, 提交f95cecf, 提交4 b1c5e1, 提交8 f50d26, 提交78 a8441, 提交2df4e29(2015年9月03日)由John Keeping (johnkeeping)。
参见commit add00ba, commit 547ed71 (03 Sep 2015) by Jeff King (peff)。 (由Junio C Hamano—gitster—在commit 7b09c45中合并,2015年10月5日)
特别地,上面的最后一个(commit add00ba)提到:
date: make "local" orthogonal to date format: Most of our "--date" modes are about the format of the date: which items we show and in what order. But "--date=local" is a bit of an oddball. It means "show the date in the normal format, but using the local timezone". The timezone we use is orthogonal to the actual format, and there is no reason we could not have "localized iso8601", etc. This patch adds a "local" boolean field to "struct date_mode", and drops the DATE_LOCAL element from the date_mode_type enum (it's now just DATE_NORMAL plus local=1). The new feature is accessible to users by adding "-local" to any date mode (e.g., "iso-local"), and we retain "local" as an alias for "default-local" for backwards compatibility.
注意“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.
请看这个帖子进行讨论。