如何在同一CLI终端中在屏幕上显示`git branch`的输出?

时间:2019-01-23 16:20:41

标签: git shell command-line-interface

抱歉,我在表达问题时遇到了麻烦。我正在使用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的工作方式。最近发生了一些变化,这让我发疯了!有什么办法可以恢复以前的行为?

1 个答案:

答案 0 :(得分:1)

这实际上是您的传呼机的问题(目前可能是less)。

大多数终端模拟器提供备用屏幕的概念。打开编辑器将切换到该备用屏幕;该屏幕中显示的文本保留在该屏幕中,并且 only 保留在该屏幕中。退出编辑器会切换回主屏幕,并且备用屏幕文本会消失,因此您可以返回到命令行会话,而不会出现编辑器的显示混乱的情况。如果这正是您想要的,并且在使用编辑器时使有些有意义,那么这很好。

不幸的是,这里的实现是对使用游标寻址模式的所有 less使用游标寻址模式的此操作进行切换。因此,这意味着通过less 的管道输出也将切换到备用屏幕。

有许多解决方法和修复程序。 less本身最简单的方法是使用-X选项,如this bug reportless文档中所述:

  

-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”方法。)