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。