【问题标题】:How can I run 'git diff some/long/file/name' without typing the full path?如何在不输入完整路径的情况下运行“git diff some/long/file/name”?
【发布时间】:2015-11-10 12:11:35
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

仅:

git diff

或者:

git diff --cached

然后用键盘滚动。

【讨论】:

  • 这不是这个问题的答案,当您编辑大量文件时不起作用
  • 好的。我从一开始就不知道这一点。它帮助我进行了一些小改动。
【解决方案2】:

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

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

【讨论】:

  • 太棒了!我需要的。非常感谢蒂姆。
  • 谢谢你的回答,这看起来真的很有用
【解决方案3】:

另一种无需安装单独工具即可实现的方法是剥离 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 合二为一,因为有两个单独的是愚蠢的。

【讨论】:

  • 我正在考虑这样的事情。感谢您的回答。
【解决方案4】:

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

git diff -- **/name

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

git diff -- *na*

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2021-10-04
      相关资源
      最近更新 更多