使git log命令输出“内联”格式的命令行结果

15

我不知道该如何更好地表达这个问题。

当我运行任何git log命令时,它会在自己的“窗口”中产生输出。我需要按q键回到提示符,然后所有日志显示就消失了。

有没有办法使日志输出“内联”,以便日志输出显示在提示符后面?


4
你需要按q键,因为输出结果使用了分页器。如果你不想使用分页器,你可以在git和子命令之间添加--no-pager参数。例如,使用git --no-pager log - ElpieKay
2
另外(假设是*nix系统),如果你想让git log默认直接输出到标准输出,你可以设置core.pager配置变量使用cat(而不是默认的less)。也就是说,要在全局的gitconfig中设置该配置变量,请运行git config --global core.pager cat - Alderath
2
此外,如果使用的分页器是less,您可以设置LESS环境变量以包括-FX--quit-if-one-screen --no-init)选项。第一个选项将使您无需按下“q”键即可获得短输出(例如git log -1),第二个选项将使其在less退出后“粘”在标准输出中(这可能就是您所说的“内联”显示)。 - eush77
@eush77,确实这将是理想的行为。我正在使用zsh。但我不知道如何设置环境变量。你能详细说明一下吗? 另外,请把这个评论转换成一个答案,我会接受它。 最后,我已经添加了git cofig -- global core.pager "less --quit-if-one-screen --no-init"来解决git的问题 :) - deshmukh
2个回答

22

如果你使用的是中文操作系统,可以在命令行中输入下列指令:git log,但是当你退出 git 后,该命令的输出不会留存在终端历史记录中。这是由于 git 使用的分页程序发出了转义序列,以切换到备用显示缓冲区,以保持主缓冲区完好无损。通常情况下,这是一个有用的功能。

一些分页程序允许禁用此缓冲区切换。例如,如果你正在使用的分页程序是 less(Unix-like 系统上的默认分页程序),你可以在 shell 配置文件中设置 LESS 环境变量:

export LESS="--no-init"

这将默认启用-X,--no-init选项(可通过命令行上的-+X开关关闭)。其效果是git log的输出将被写入主缓冲区,并因此保留在终端历史记录中。
如果分页程序支持缓冲区切换但没有关闭它的方法,那么唯一的解决办法就是不要将这样的分页程序用于git log输出。
将分页程序切换到其他内容:
$ git config --global core.pager less

或者在git log中禁用分页:

$ git config --global pager.log false

甚至对于其他git命令也是一样的:

$ git config --global core.pager cat

当我运行任何git log命令时,它会在自己的“窗口”中生成输出。我需要按下q回到提示符。
至于您问题中的这部分,我想说的是,您实际上并不希望每次运行git log时在终端中溢出兆字节的输出。分页程序提供的功能通常非常有用:滚动、搜索、跳转、更改文件、运行命令等等。
您可能想要的是为短输出绕过分页程序。git没有提供此功能,但一些分页程序可以。例如,如果您使用less,您可以在shell配置中将-F, --quit-if-one-screen选项添加到LESS环境变量中:
export LESS="--no-init --quit-if-one-screen"

这将使得less在整个输出可以在单个屏幕中显示时自动退出。

14

使用以下命令:

git log | cat

使用cat命令在终端上显示git log的输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接