3

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

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

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

# git diff application/controllers/controller.php

我想知道这是否是一种告诉 git 仅在暂存区域中查找文件的方法(可能是一些通过选项)?所以我可以运行类似的东西:

# git diff controller.php

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

简而言之:有没有办法在不输入文件完整路径的情况下对暂存文件进行 git 处理?

4

3 回答 3

1

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

git diff --staged

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

git diff -- full/path/to/file

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

git ls-files | grep filename | xargs git diff --
于 2013-06-05T01:40:53.543 回答
0

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

于 2013-06-05T01:37:35.993 回答
0
git diff `find . -name controller.php`

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

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

git diff `git ls-files */controller.php`
git diff `git ls-files *troll*`
于 2013-06-05T02:54:48.350 回答