我试图在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]"
当前回答
您可以使用字段截断选项来避免使用太多%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>'
我只是注意到这篇文章相对于最初的帖子有点循环,但我还是把它留着,以防其他人带着和我一样的搜索参数来到这里。
其他回答
您可以使用字段截断选项来避免使用太多%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>'
我只是注意到这篇文章相对于最初的帖子有点循环,但我还是把它留着,以防其他人带着和我一样的搜索参数来到这里。
注意“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.
请看这个帖子进行讨论。
在花了很长时间寻找一种方法来让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'
date -d @$(git log -n1 --format="%at") +%Y%m%d%H%M
请注意,这将转换为您的本地时区,以防这对您的用例很重要。
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]"