在我的工作流程中,我经常运行以下一对命令:
$ git status
M README.txt
M some/long/file/name
$ git diff some/long/file/name
有没有办法,对于长文件名快速输入/ use_shortcat而不复制它的名称(这个动作需要使用鼠标,它不像打字那么快)?
也许类似于git diff $2
,其中$2
是状态列表中的第二个更改文件...?
答案 0 :(得分:4)
This tool (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
我认为它比我上面评论中链接的帖子中的解决方案更适合您的需求
答案 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
然后用键盘滚动。