抱歉,我在表达问题时遇到了麻烦。我正在使用CLI版本(如果需要的话,zsh
),git版本2.20.0
和macOS上运行(想想我也在我的Ubuntu系统上也遇到过它)。
问题:如何在同一CLI屏幕上显示git branch
的输出?即如果我跑步,
$ 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
的工作方式。最近发生了一些变化,这让我发疯了!有什么办法可以恢复以前的行为?
答案 0 :(得分:1)
这实际上是您的传呼机的问题(目前可能是less
)。
大多数终端模拟器提供备用屏幕的概念。打开编辑器将切换到该备用屏幕;该屏幕中显示的文本保留在该屏幕中,并且 only 保留在该屏幕中。退出编辑器会切换回主屏幕,并且备用屏幕文本会消失,因此您可以返回到命令行会话,而不会出现编辑器的显示混乱的情况。如果这正是您想要的,并且在使用编辑器时使有些有意义,那么这很好。
不幸的是,这里的实现是对使用游标寻址模式的所有 和less
使用游标寻址模式的此操作进行切换。因此,这意味着通过less
的管道输出也将切换到备用屏幕。
有许多解决方法和修复程序。 less
本身最简单的方法是使用-X
选项,如this bug report和less
文档中所述:
-X或--no-init
禁用发送termcap初始化和取消初始化 字符串到终端。如果 反初始化字符串做了一些不必要的事情,例如 清除屏幕。
请注意,Git默认运行less -FRX
,因此,如果您(a)使用less
,而(b)没有获取-FRX
,请检查您是否覆盖了通过core.pager
(或$GIT_PAGER
)和/或通过环境变量LESS
默认设置。
某些用户(包括我自己)真的非常讨厌这种替代屏幕切换,希望我们的编辑器输出保留在屏幕上。在这里,一个更强大的技巧是完全禁用备用屏幕。但是,这很难。参见How can you turn off alternate screen in OSX's Terminal.app?,有些人真的非常喜欢此行为,并希望在关闭时将其打开:参见screen: how to turn on alternate screen?(有关如何操作的更多链接将其关闭)。
(我自己使用“反编译terminfo,编辑掉alt屏幕转义序列,然后编译自己的terminfo”方法。)