所以让我们想象我在暂存区域中有一些文件如下:
# 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?
答案 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*`