我如何运行' git diff some / long / file / name'没有输入完整路径?

时间:2015-08-17 18:41:43

标签: git command-line-interface git-diff git-status

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

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

有没有办法,对于长文件名快速输入/ use_shortcat而不复制它的名称(这个动作需要使用鼠标,它不像打字那么快)? 也许类似于git diff $2,其中$2是状态列表中的第二个更改文件...?

5 个答案:

答案 0 :(得分:4)

This tool (SCM Breeze)可以满足您的需求,具体请参阅文档的这一部分

  

enter image description here   例如,如果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

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

答案 1 :(得分:4)

你可以在不安装单独工具的情况下实现它的另一种方法是剥离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。

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

答案 2 :(得分:3)

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

git diff -- **/name

鉴于该名称的一小段,例如“na”,在修改过的文件列表中是唯一的,你也可以这样做:

git diff -- *na*

通过这种方式,您无需计算条目以找出您想要区分的数字。

答案 3 :(得分:0)

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

alias gfz="git status -s --porcelain  | cut -c 4- | fzf"
git diff $(gfz)

答案 4 :(得分:-3)

git diff

或者:

git diff --cached

然后用键盘滚动。