首页 > 解决方案 > 如何在同一 CLI 终端中在屏幕上显示“git branch”的输出?

问题描述

我很抱歉,但我无法表达我的问题。我在 CLI 上运行(zsh如果重要的话),使用 git 版本2.20.0和 macOS(我想我也在家里的 Ubuntu 系统上遇到过它)。

问题:如何git branch在同一个 CLI 屏幕上显示输出?即,如果我跑步,

$ git branch
$

它会弹出一个新的屏幕/窗口(在我的 CLI 内),向我展示我的所有分支。按下q关闭屏幕并将我返回到 shell。问题是我不记得我拥有的分支机构的名称!我希望它们打印在屏幕上!!

理想的输出,

$ git branch
* master
branch_01
branch_02
temp_branch
experiment_2_delete
$

一个可疑的解决方法是执行以下操作,

$ git branch > stuff.txt
$ cat stuff.txt
* master
branch_01
branch_02 
...
$

但它会在当前目录中创建一个新的文本文件,并且会变得混乱。记忆告诉我,这曾经是git工作的方式。最近发生了一些变化,这让我发疯了!有什么办法可以恢复旧的行为?

标签: gitshellcommand-line-interface

解决方案


这实际上是您的寻呼机的问题(可能是less这些天)。

大多数终端仿真器都提供备用屏幕的概念。打开你的编辑器切换到这个备用屏幕;此屏幕中显示的文本保留在此屏幕中,并且在此屏幕中。退出编辑器切换回主屏幕,替代屏幕文本消失,这样您就回到了命令行会话,而编辑器的显示不会使事情变得混乱。如果这是您想要的,那很好,并且在使用编辑器时也有意义。

不幸的是,这里的实现是对所有使用游标寻址模式和less使用游标寻址模式的东西进行这种切换。所以这意味着管道输出less 切换到备用屏幕。

有许多解决方法和修复。最简单的方法less是使用该-X选项,如本错误报告less文档中所述:

-X 或 --no-init
禁止将 termcap 初始化和去初始化字符串发送到终端。如果去初始化字符串做了一些不必要的事情,比如清除屏幕,这有时是可取的。

请注意,Git 默认为 running less -FRX,因此如果您 (a) 正在使用less并且 (b) 没有得到-FRX,请检查您是否通过core.pager(或$GIT_PAGER)和/或环境变量覆盖了默认值LESS

一些用户(包括我自己)真的非常讨厌这种交替屏幕切换,并希望我们的编辑器输出保留在屏幕上。在这里,一个更强大的技巧是完全禁用备用屏幕。然而,这更难。参见,例如,如何在 OSX 的 Terminal.app 中关闭备用屏幕? 有些人非常非常喜欢这种行为,并希望在它关闭时将其打开:例如,请参阅屏幕:如何打开备用屏幕?(其中有更多关于如何关闭它的链接)。

(我自己使用“反编译 terminfo,编辑掉 alt-screen 转义序列,并自己编译自己的 terminfo”方法。)


推荐阅读