Git如何保存预设的git log --format

Posted

技术标签:

【中文标题】Git如何保存预设的git log --format【英文标题】:Git how to save a preset git log --format 【发布时间】:2010-11-29 07:05:03 【问题描述】:

我真的很喜欢简短的 git 日志格式,我可以在其中看到作者、日期和更改描述,如下所示:

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

哪些输出:

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi

(来自***问题“link text”)

现在的问题是,如何在我的机器上将其保存为新格式,这样我只需要编写类似的内容,例如:

git log --format=jespers_favourite

【问题讨论】:

在您发表评论后,我已经修复了答案。 【参考方案1】:

在较新版本的 Git(已通过 v1.7.8 确认)中,可以使用 git config pretty.named_format 设置 命名的漂亮打印日志格式。这些可以使用<file-option> 参数在机器范围、用户或文件级别进行设置。

要创建名为jespers_favourite 的日志格式或整机使用--system

git config --system pretty.jespers_favourite "%h%x09%an%x09%ad%x09%s"

对于单用户使用'--global'

git config --global pretty.jespers_favourite "%h%x09%an%x09%ad%x09%s"

<file-option> 参数留空将默认设置当前存储库的配置文件.git/config,除非另有定义。

【讨论】:

这几乎是正确的,但有几个重要的警告:名称不能包含下划线(至少在 Git 1.7.10 中),自定义格式必须以“格式: "(或引用其中一种内置格式)。【参考方案2】:

考虑到 git log 手册页提到:

--pretty[=<format>]
--format[=<format>]

以给定的格式漂亮地打印提交日志的内容,其中可以是 oneline、short、medium、full、fuller、email、raw 和 format: 之一。省略时,格式默认为中。

&lt;format&gt; 只能有预定义的值。 这只会让您有可能将define an alias 作为该命令的快捷方式。

[alias]
        jespers_favourite = log --pretty=format:"%h%x09%an%x09%ad%x09%s"

[alias]
        compactlog = log --pretty=format:"%h%x09%an%x09%ad%x09%s"

【讨论】:

@ftassi 好点。我已经恢复了链接(你提到的那个)。 为了完成这项工作,我也需要转义引号 @ftassi 您需要在git config alias.xxx... 命令中转义引号吗?不在.config 文件中? @VonC 我已经将它们转义到 ~/.gitconfig 文件中,这是我正在使用的东西的 sn-p gist.github.com/283ad42cd367ec35cf76 自我提醒:通过这次投票,我在 Stack Overflow 上通过了 110 万(2022 年 1 月 28 日),比 reaching 1M (Nov. 29th, 2020) 晚了一年零两个月。【参考方案3】:

您可以使用 git-config 配置默认的漂亮格式。来自 git-config 文档:

 format.pretty
           The default pretty format for log/show/whatchanged command, See git-log(1), git-show(1), git-whatchanged(1).

例如:

git config --add format.pretty fuller

或原始海报所需的格式:

git config --add format.pretty "%h%x09%an%x09%ad%x09%s"

与其他 git config 设置一样,format.pretty 可以设置在全局、系统或存储库范围(默认)。

【讨论】:

仅供参考,更改默认格式听起来不像问题最初想要的,但这是一个有用的补充点。【参考方案4】:

使用最新版本的 git(此处为 1.7…2.21),您可以将默认格式更改为命名格式或格式字符串。当你这样做的时候,你也可以添加一些PRETTY FORMATS 自动颜色。我还发现编辑文件比使用命令更容易;但我先从他们开始,先获得正确的配置文件格式,然后再修补。

默认更改为:

git config --global --add format.pretty \
"%C(yellow)%h%Creset%x09%Cred%<(13)%an%Creset%x09%Cblue%ad%Creset%x09%s"

导致添加到您的.gitconfig 中:

[format]
    pretty = %C(yellow)%h%Creset%x09%Cred%<(13)%an%Creset%x09%Cblue%ad%Creset%x09%s

但是,添加命名格式可能对您更有用,如问题后面部分所述。

一个命名格式被添加:

git config --global pretty.dateline \
"format:%C(yellow)%h%Creset%x09%Cred%<(13)%an%Creset%x09%Cblue%ad%Creset%x09%s"

或者通过添加到您的.gitconfig 为:

[pretty]
    dateline = format:%C(yellow)%h%Creset%x09%Cred%<(13)%an%Creset%x09%Cblue%ad%Creset%x09%s

结合使用:

如果你同时添加两者,你可以让它们阅读:

[pretty]
    dateline = format:%C(yellow)%h%Creset%x09%Cred%<(13)%an%Creset%x09%Cblue%ad%Creset%x09%s

[format]
    pretty = dateline

注意事项:

应该注意format:前缀的区别,我个人喜欢将默认的漂亮格式保留为medium。如您所知,%ad 部分可以通过--date=relativedefaultiso8601localrawrelativerfc2822short 中的任何一个进行修改;所以我喜欢这样使用它:

git log -25 --pretty=dateline --date=short -- when/was/this/changed.txt

【讨论】:

format.pretty 配置的有趣使用,以及对我 2009 年旧答案的不错更新!赞成。

以上是关于Git如何保存预设的git log --format的主要内容,如果未能解决你的问题,请参考以下文章

GIT速查手册

git 命令 查看历史提交 git log

git 远程协作主要命令

git常用别名设置,保存一份

如何使 git-diff 和 git log 忽略新文件和已删除文件?

如何运行 git log 以仅查看特定分支的更改?