我试图在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 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.

其他回答

您可以使用字段截断选项来避免使用太多%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>'

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

格式选项%ai是我想要的:

%ai:作者日期,类似ISO 8601的格式

--format="%ai"

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.

在花了很长时间寻找一种方法来让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'

我需要特殊格式的日期。

在Git 2.21(2019年第一季度)中,引入了一种新的日期格式“——date=human”,它可以根据时间与当前时间的距离改变输出。

"——date=auto"可以在输出到寻呼机或终端时使用这种新格式,否则使用默认格式。

参见Stephen P. Smith(' ')的commit 110a6a1, commit b841d4f(2019年1月29日)和commit 038a878, commit 2fd7c22(2019年1月21日)。 参见Linus Torvalds (Torvalds)的commit acdd377(2019年1月18日)。 (由Junio C Hamano—gitster—在commit ecbe1be中合并,2019年2月7日)

添加“人工”日期格式文档

Display date and time information in a format similar to how people write dates in other contexts. If the year isn't specified then, the reader infers the date is given is in the current year. By not displaying the redundant information, the reader concentrates on the information that is different. The patch reports relative dates based on information inferred from the date on the machine running the git command at the time the command is executed. While the format is more useful to humans by dropping inferred information, there is nothing that makes it actually human. If the 'relative' date format wasn't already implemented, then using 'relative' would have been appropriate. Add human date format tests. When using human several fields are suppressed depending on the time difference between the reference date and the local computer date. In cases where the difference is less than a year, the year field is suppressed. If the time is less than a day; the month and year is suppressed.

check_date_format_human 18000       "5 hours ago"       #  5 hours ago
check_date_format_human 432000      "Tue Aug 25 19:20"  #  5 days ago
check_date_format_human 1728000     "Mon Aug 10 19:20"  #  3 weeks ago
check_date_format_human 13000000    "Thu Apr 2 08:13"   #  5 months ago
check_date_format_human 31449600    "Aug 31 2008"       # 12 months ago
check_date_format_human 37500000    "Jun 22 2008"       #  1 year, 2 months ago
check_date_format_human 55188000    "Dec 1 2007"        #  1 year, 9 months ago
check_date_format_human 630000000   "Sep 13 1989"       # 20 years ago

将建议的'auto'模式替换为'auto:'

In addition to adding the 'human' format, the patch added the auto keyword which could be used in the config file as an alternate way to specify the human format. Removing 'auto' cleans up the 'human' format interface. Added the ability to specify mode 'foo' if the pager is being used by using auto:foo syntax. Therefore, 'auto:human' date mode defaults to human if we're using the pager. So you can do: git config --add log.date auto:human and your "git log" commands will show the human-legible format unless you're scripting things.


Git 2.24(2019年Q4)简化了代码。

参见Stephen P. Smith(' ')的commit 47b27c9, commit 29f4332(2019年9月12日)。 (由Junio C Hamano—gitster—在commit 36d2fca中合并,2019年10月7日)

停止传递'now'到日期代码

提交b841d4f(将人工格式添加到test-tool, 2019-01-28, Git v2.21.0-rc0)增加了一个get_time()函数,允许环境中的$GIT_TEST_DATE_NOW覆盖当前时间。 因此,我们不再需要在cmd__date()中解释该变量。 因此,我们可以停止向下传递"now"参数 日期函数,因为没有人使用它们。 注意,我们确实需要确保前面所有接受“now”参数的调用者都正确地使用了get_time()。


在Git 2.32 (Q2 2021)中," Git log——format=…"(man)占位符学习了%ah/%ch占位符来请求——date=人工输出。

参见胡哲宁(替代)提交b722d45(2021年4月25日)。 (由Junio C Hamano - gitster -在提交f16a466中合并,2021年5月7日)

Pretty:提供人工日期格式 签署人:胡振宁

添加占位符%ah和%ch来格式化作者日期和提交者日期,如——date=human does,这提供了更多的人性化日期输出。

漂亮格式现在包括在它的手册页:

'%ah'::作者日期,人类样式(类似于的——date=human选项 git rev-list)

漂亮格式现在包括在它的手册页:

'%ch'::提交者日期,人类样式(类似于的——date=human选项 git rev-list)