9

在我的工作流程中,我经常运行以下一对命令:

$ git status
M README.txt
M some/long/file/name
$ git diff some/long/file/name

有什么方法可以快速键入/使用_shortcat 获取长文件名而不复制它的名称(此操作需要使用鼠标,并且不像键入那么快)?可能类似于git diff $2$2状态列表中的第二个更改文件在哪里......?

4

5 回答 5

6

您还可以按照此答案*中的建议使用占位符。通常你不必像这样输入文件的全名

git diff -- **/name

鉴于名称的一小段,例如“na”,在修改文件列表中是唯一的,您还可以执行以下操作:

git diff -- *na*

这样您就不必计算条目来找出您想要区分的数字。

于 2016-10-20T10:40:52.330 回答
5

另一种无需安装单独工具即可完成的方法是剥离 git status 的输出,并通过 sed 将其通过管道传输,然后返回到 git diff。它是一个很长的命令,所以你可以把它放在你的 .bashrc 中并给它取别名。例如,把它放在我的 .bashrc 中:

 myfunction() {
 git status --porcelain | sed -n "${1} s/^...//p' | xargs git diff
 }
 alias gd=myfunction

然后我可以做

>> git status
M main.cpp
M tipsy.cpp
M other.cpp
>> gd 2

输出是第二个文件的 git diff 。

编辑:我将两个 sed 合二为一,因为有两个单独的是愚蠢的。

于 2015-08-17T19:12:25.233 回答
4

这个工具(SCM Breeze)可以做你需要的,具体看这部分文档

在此处输入图像描述 例如,如果 ga 是您的 git add 别名,而不是输入如下内容:

$ ga assets/git_breeze/config* assets/git_breeze/install.sh You can

输入这个:

$ ga $e2 $e3 $e11 

但是 SCM Breeze 将 ga 别名为 git_add_shortcuts 函数,该函数足够聪明,可以扩展整数和范围,因此您只需键入:

$ ga 2 3 11

我认为它比我在上面的评论中链接到的帖子中的解决方案更适合您的需求

于 2015-08-17T18:59:34.960 回答
0

我找到了另一种方式(但是“SCM Breeze”很棒,而且是我的主要工具):我正在使用https://github.com/junegunn/fzf模糊搜索和别名:

alias gfz="git status -s --porcelain  | cut -c 4- | fzf"
git diff $(gfz)
于 2017-11-02T12:28:10.073 回答
-3

仅有的:

git diff

或者:

git diff --cached

然后用键盘滚动。

于 2015-08-17T18:53:50.737 回答