一种在不使用完整路径的情况下在git的staging / commit区域中处理文件的方法?

时间:2013-06-05 01:28:22

标签: 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的文件,它会在后台自动执行一些魔术并访问正确的文件吗?显然可能出现2个同名文件存在的情况,然后显然需要完整/部分路径。

所以简而言之:有没有办法在没有输入文件的完整路径的情况下使用暂存文件执行git?

3 个答案:

答案 0 :(得分:1)

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

git diff --staged

如果你想只传播一个文件:

git diff -- full/path/to/file

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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*`