从mac终端向下滚动git diff

kulphzqa  于 2023-01-04  发布在  Git
关注(0)|答案(9)|浏览(148)

我在OS X 10约塞米蒂的终端上使用git。
当我执行git diff时,我会得到一长串的修改,有时我只需要滚动到最后,但我想不出一种方法来做到这一点,除了在MacBook Pro上按住keydown键,然后它会慢慢滚动。
如果我按FN+向下键,那么它不会滚动,除非我已经使用向下按钮向下滚动,但不会进一步向下...
任何建议都会很感激,这很烦人

o8x7eapl

o8x7eapl1#

git diff使用与less Unix命令相同的寻呼机。

  • 使用du键向下/向上移动半页(技术上向前/向后)
  • 跳到最后一行:G
  • 如果要显示帮助,请使用h

另一个技巧是将差异存储为补丁文件,就像他们在电子邮件时代所做的那样!然后你可以在任何程序中打开补丁(Sublime有语法高亮显示红色/绿色)
一些例子:
git diff master > ~/patch
git show someCommitSHA > ~/patch
js和css的git diff master myBranch -- *.js *.css > ~/patch修补程序与主程序不同
git apply ~/patch
通常你会通过应用diff来使用补丁,但是你可以在任何文本编辑器中打开文件.如果你不想完全提交diff文件,但仍然想在其他地方使用它或将其发送给朋友,这是很有用的
您还可以使用git diff master | grep -C 2 someKeyword在某个关键字周围显示+/- 2行的差异

6ioyuze2

6ioyuze22#

第一个月
在我的新macOS笔记本电脑上,git日志滚动功能如我所料(向上翻页/向下翻页按钮、颜色、滚轮滚动)。
为什么这样做?根据git-config manpage
注意,如果在运行分页器时LESS环境变量未被设置,git会将其设置为FRSX。
根据less manpage
-X禁止向终端发送termcap初始化和取消初始化字符串。如果取消初始化字符串做了一些不必要的事情,比如清除屏幕,这有时是可取的。
我实际上不知道这是什么意思,但X打破了翻页/翻页/滚轮。
-F如果整个文件可以显示在第一个屏幕上,则会导致less自动退出。
如果没有X,则F在没有分页时中断,大概是因为less立即退出,并且有一些东西阻止它直接打印到终端。

sf6xfgos

sf6xfgos3#

根据mzabaluev的评论:
OS X终端与less有一些神奇的集成,但当git将less作为子进程运行时,这种集成就会中断:当以git diff运行时|less,touchpad手势可以向前滚动,但是git diff的输出只能滚动终端输出,不能告诉less向前滚动。有趣的是,git help没有这个问题。-mzabaluev Jan 4 at 0:39
这种魔力还包括启用向上翻页(FN+up)和向下翻页(FN+down)。
一种快速而又不太实用的方法是自己调用less

git diff --color=always | less -r

命令行选项保留了git的彩色输出。我从Can less retain colored output?得到的

qyswt5oh

qyswt5oh4#

您可以使用任意less命令来浏览历史记录。请参阅:常用较少命令
例如:在终端的左下角,您一定会看到这样的内容。

在上面的例子中,历史具有221行,其中当前窗口示出第21 - 62行。

    • 直接转到行号**:您可以通过键入以下命令直接转到某一行
line-number (followed by) g   (no spaces necessary)

例如:要转到第100行,只需键入100g

    • 跳过x行:**键入一个数字并按Enter键。
    • 向下滚动再向下滚动**使用Fn

或使用以下选项。
按ILI的建议按空格键。

    • 向上滚动一页**

点击"w"
"回家吧"
Fn左箭头转到结尾Fn右箭头

y53ybaqx

y53ybaqx5#

brew install less
git config --global core.pager "less -+\$LESS -RSF"

安装较新版本的less修复了-F导致小输出在没有-X的情况下完全消失的bug,然后config命令删除了-X,这是破坏滚动的原因。
这将用最新版本替换MacOS附带的less版本,但由于它们是相同的实用程序(不像GNU coreutils与BSD coreutils),这不应该破坏东西。

解释

这是对ognockocaten's answer的扩展。
这个答案意味着:

git config --global core.pager "less -+\$LESS -RS"

这将删除两个选项:
-F/--quit-if-one-screen
如果整个文件可以显示在第一个屏幕上,则会导致less自动退出。
以及-X/--no-init

  • X禁止向终端发送termcap初始化和取消初始化字符串。如果取消初始化字符串做了一些不必要的事情,比如清除屏幕,这有时是可取的。
    这对于当前的问题是有效的,但不是最优的,因为less总是切换到一个备用页面,不管输出有多小。所以,即使是像git diff这样的小命令,你也会得到一个完整的备用屏幕。
    仔细阅读,重新添加-F似乎可以解决这个问题,但是,两个因素的组合会导致这个问题:
  • 在Mac OS随附的less版本487上,less将在检查文本是否足够小之前 * 首先 * 切换到备用屏幕,从而将输出打印到备用屏幕缓冲区。此问题在版本530中得到修复(请参阅https://unix.stackexchange.com/a/107355/39135
  • 在MacOS上,如果没有-X,则从备用缓冲区切换回主缓冲区会清除屏幕,从而擦除刚刚打印到备用屏幕缓冲区的所有文本。

所以只要重新添加-F,你会得到小的输出被完全删除,就像他们从来没有打印过。我们不能重新添加-X来解决这个问题,因为这会破坏滚动,但我们 * 可以 * 更新到一个新版本的less!
因此,这一切都在一起-我们可以使用homebrew安装最新的稳定的less版本,然后配置寻呼机,以包括-F选项,根据命令块在本文开始。

vjrehmav

vjrehmav6#

最简单的方法是使用less来读取diff输出,您需要使用--color-R选项来保持着色。

git diff --color | less -R

这对我来说很好。
您可以为此命令创建宏。
自从我写了这个答案之后,我发现您可以使用LESS环境变量来设置less的选项,这样您就可以更容易地执行上面的操作:

LESS=R git diff
kjthegm6

kjthegm67#

只需在git diff后打开较少的终端中按下h-它会调用带有快捷方式的帮助窗口
screenshot with less help text

ifmq2ha2

ifmq2ha28#

在@ognockocaten的答案的基础上,您可以通过更改LESS环境变量来更改传递给less命令的默认选项。
为此,将这一行添加到启动脚本中(可能是~/.bashrc~/.zshrc~/.bash_profile)。

export LESS="RS"

而且它应该对你打开的任何新终端都有效。

ovfsdjhp

ovfsdjhp9#

fn +选项()+向下
在Mac上为我工作

相关问题