如何在不键入整个路径的情况下实现git diff

如何在不键入整个路径的情况下实现git diff,git,github,Git,Github,我正在使用github windows shell,我将执行以下操作 git status 看到修改过的文件列表,想提醒自己发生了什么变化。我得打个类似的字 git diff Source\FooBar\Pages\FooBar.aspx 这似乎需要输入很多字符。是否有更简单的工作流来查看我没有看到的差异?如果您想查看所有更改,只需使用git diff。不过,它不会列出新文件 要有选择地查看更改,我建议使用GUI,例如,git GUI或gitk我使用Console2来承载bash 有了它,我

我正在使用github windows shell,我将执行以下操作

git status
看到修改过的文件列表,想提醒自己发生了什么变化。我得打个类似的字

git diff Source\FooBar\Pages\FooBar.aspx

这似乎需要输入很多字符。是否有更简单的工作流来查看我没有看到的差异?

如果您想查看所有更改,只需使用
git diff
。不过,它不会列出新文件


要有选择地查看更改,我建议使用GUI,例如,
git GUI
gitk
我使用Console2来承载bash

有了它,我可以使用Ctrl+点击并拖动来突出显示文本,然后可以将文本复制到剪贴板并粘贴到其他命令行中

我用它来复制文件路径

这使我能够键入git diff[Ctrl+V]并获得所需的命令行。

大多数终端(例如windows控制台2)都具有自动完成功能

开始键入并按
tab

通常git可以在2个字符后自动完成。比如:

gi
tab
di
tab

将为您提供git diff。如果文件夹的命名方式不同,则可能会在单个字符后自动完成。例如,如果项目根目录有三个文件:

  • 自述
  • /来源/
  • /垃圾箱/
您只需键入
r
s
b
,然后按tab键自动键入这些文件名

仅供参考, 自动完成适用于终端和git命令、文件和目录名、分支和标记名,但不幸的是,不适用于提交ID

git diff -- **/FooBar.aspx

通常,
*
代表文件名的任何部分,
***
代表任何子路径。例如,
git diff--**/main/**.aspx
将仅区分驻留在
main
main
自身子目录中的
aspx
文件。这适用于接受路径的其他命令,如commit和add

这样做会更好,因为它处理的是编程工具/实现,而不是概念/设计问题。请不要在那里重新询问,因为这可以迁移。一个好的规则是,如果你的问题在你的IDE前面,那么它就属于IDE。如果它让你站在白板前,它就属于程序员。你特别想避免什么?是否要避免单独查看每个文件的差异?是否要在不键入完整路径的情况下获取特定文件的差异?我特别希望避免键入每个文件的完整路径。我想
git diff
autocomplete适用于gi
tab
di
tab
部分,但不适用于文件名部分。当您的文件名通常很长,比如
Source\FooBar\Pages\FooBar.aspx
时,使用完全不正确的文件名(在我使用的windows msysgit中)会让人非常沮丧。我只是在公开回购中尝试过<代码>地理信息tab
di
tab
st
tab
c
tab。。。变成
git-diff-style/css/
它会自动键入斜杠和所有内容。在Windows上,这适用于提交和添加,但奇怪的是,它不适用于diff。它抱怨说,您需要使用“---”来分隔路径,即使您是。不幸的是,这不适用于ubuntu机器上的my zsh