git log 的行为类似于 less

git log 的行为类似于 less

git log -{n},当-n足够小时,不会打开,而less只是将其打印到屏幕上。这是理想的。 git log -1不应占据整个屏幕。

不幸的是,在 MINGW 的 bash shell 中,在我运行非 git 命令之后,git log其行为就像我将其运行到less并推送一样q(换句话说,数据被打印到屏幕的底部,而我最终在顶部得到了一堆空白)。

假想演示(请原谅它的长度):

>> clear









>> git log -1




commit 123123...
Author: CPfohl
Date: {today}
    {Message}

>> git log -1
commit 123123...
Author: CPfohl
Date: {today}
    {Message}

无论我之前执行什么 git 命令,git log只要git log -{n}一个 git 命令。

这是一个错误吗?或者有没有什么办法可以让它正常运行?

答案1

如果你想禁用部分/全部 git 命令的分页,你可以:

  • 将配置值(pager.<cmd>core.pager所有命令)设置为cat
  • 使用--no-pager选项

但也许我没理解你的问题。less上述配置选项中设置适当的分页命令(带一些选项)可能会改变上述行为。

答案2

或者您也可以在 git 配置文件中定义一个别名,允许您以特殊的方式显示日志,例如,如果您输入以下命令,则设置 .gitconfig 以使用 Sublime Text 3 进行编辑:

git config --global core.editor "'c:/Program Files/Sublime Text 3/sublime_text.exe'" -w

git config --global alias.showconfig "config --global -e"

此外,您还可以在 git 中添加别名,以显示存储库中所有分支的最新提交:

如果 .gitconfig 中缺少 [别名],请添加,然后:

latest = "!f() { echo "Latest \"${1:-11}\" commits accross all branches:"; git log  --abbrev-commit --date=relative --branches --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' -n ${1:-11};  } ; f"

此处的别名使用shell 函数将参数设置为 shell 变量。如果不指定参数值,别名将使用 11 作为默认值(语法很容易用 -11 解释,但语法 ${1:-11} 表示 shell 中的第一个参数,如果缺少该参数,则为该参数设置默认值。有点像 C# 中的默认值或 Powershell 中的默认参数。

可以看到,我们赋予git的别名可以包含多个命令,各个命令之间用分号分隔。

我尝试了一下git 最新git 最新 3在下面的示例输出屏幕截图中。您可以在左侧看到我对 git 配置的编辑。

使用 shell 函数和别名,我们可以用 Git 做更多事情,而不必输入太多内容。shell 函数的语法遵循 BASH 规则,也可以在 Windows 环境中使用 CMD。

在此处输入图片描述

相关内容