一种在不使用完整路径的情况下对 git 的暂存/提交区域中的文件进行操作的方法?



所以让我们想象一下,我在暂存区中有一些文件,比如:

#   modified:   application/controllers/controller.php
#   modified:   application/views/protected_views/some_view.php
#   modified:   less/style.less

因此,如果我只想在controller.php上查看diff,我需要运行以下命令:

# git diff application/controllers/controller.php

我想知道这是否是告诉git只在暂存区查找文件的一种方法(可能是一些选项(?所以我可以运行这样的程序:

# git diff controller.php

所以,即使当前目录中没有controller.php文件,它也会发现暂存区中有一个名为controller.php的文件,它会自动在后台执行一些魔术,并访问正确的文件?显然,如果存在两个同名文件,可能会出现这种情况,那么显然需要完整/部分路径。

简而言之:有没有什么方法可以在不输入文件完整路径的情况下对暂存文件执行git操作?

如果您只想区分所有暂存的文件,而不显示其他差异:

git diff --staged

如果你只想区分一个文件:

git diff -- full/path/to/file

要区分所有具有特定名称的文件(无论目录如何(:

git ls-files | grep filename | xargs git diff --

我能想到的做你想做的事情的唯一方法就是在文件所在的目录中。在你的例子中,如果你在PROJECT/application/controllers/中,那么git diff controller.php会像你期望的那样工作。

git diff `find . -name controller.php`

请注意,这取决于工作树中的控制器(而不是索引/缓存/暂存区域(,因为find不知道git,所以@cforbish的答案在这方面更好。

实际上,基于@cforbish的答案,*可以匹配ls-files:的任何路径(或片段(

git diff `git ls-files */controller.php`
git diff `git ls-files *troll*`

最新更新