如何在同一CLI终端上显示“git branch”的输出?

8
抱歉,我现在有些困难,无法表述我的问题。我使用 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 的工作方式。最近有些改变让我感到很困扰!有没有办法恢复旧的行为?


基本上,我想问如何在CLI上打印git分支,但这并不是确切的问题,可能会让人们感到困惑。 我花费了令人痛苦的30分钟左右来输入这个问题。 - chronodekar
@phd 阅读那个问题(和答案)- 是的,这是一个重复的问题。git config --global pager.branch false 正是我所需要的! - chronodekar
记录一下,我确实使用了搜索功能,但是没有找到那个问题。在我创建这个问题的时候,它也没有出现作为备选问题。 - chronodekar
这种情况在重复问题中经常发生,特别是当不清楚正在发生什么时,这就是为什么重复问题并不是坏事的原因。我仍然建议确保您的 less 设置默认使用 -X(也许还有 -F-R 使颜色工作)。 - torek
你也可以在你的~/.gitconfig文件中添加以下内容:[core] pager = less -FRX - Boyan
1个回答

5
这实际上是您的分页器(可能是现在的less)的问题。
大多数终端仿真器提供了“备用屏幕”的概念。打开编辑器会切换到此备用屏幕;在此屏幕中显示的文本仅保留在此屏幕中,而不会出现在主屏幕中。退出编辑器会切换回主屏幕,备用屏幕文本消失,这样您就可以回到命令行会话,而不会被编辑器的显示所干扰。如果这正是您想要的,那就很好,当使用编辑器时也有一定意义。
不幸的是,这里的实现是针对使用光标寻址模式的所有内容进行切换,而less使用光标寻址模式。因此,这意味着通过less将输出传输到管道也会切换到备用屏幕。
有许多解决方法和修复方法。对于less本身最简单的方法是使用-X选项,如此错误报告less文档中所述:

-X或--no-init
禁用将termcap初始化和去初始化字符串发送到终端。如果去初始化字符串执行不必要的操作,例如清除屏幕,则有时会出现这种情况。

请注意,Git默认运行less -FRX,因此如果您(a)正在使用less并且(b)没有得到-FRX,请检查是否通过core.pager(或$GIT_PAGER)和/或通过环境变量LESS覆盖了默认值。
一些用户(包括我自己)真的非常讨厌这种备用屏幕切换,并希望我们的编辑器输出保留在屏幕上。在这里,更强大的技巧是完全禁用备用屏幕。然而,这更困难。例如,请参见如何在OSX的Terminal.app中关闭备用屏幕?一些人真的非常喜欢这种行为,并希望在关闭时打开它:请参见screen:如何打开备用屏幕?(其中还有更多关于如何关闭它的链接)。
(我自己使用“反编译terminfo,编辑alt-screen转义序列并编译自己的terminfo”方法。)

2
这是一篇信息性的帖子,但 https://dev59.com/Y1YM5IYBdhLWcg3wzSkg#48370253 更符合我所寻找的。感谢 @torek。 - chronodekar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接