如何使用通配符路径规范检出分支中的文件?

时间:2016-06-01 09:11:52

标签: git

我无法使用通配符检出文件,如git-scm page所述,来自特定的refspec。用一个例子来描述这个问题。

使用java和c文件创建存储库:

$ git log --pretty=oneline
d62e124f02e9ec6e2848ccc8db05bb37db167281 All files

$ git ls-tree -r --name-only HEAD .
c/one/first.c
c/two/second.c
java/one/first.java
java/two/second.java

删除java文件:

$ git log --pretty=oneline
97b2ffbdd79f924ca27d0404c612b93feee7f492 Removed java files
d62e124f02e9ec6e2848ccc8db05bb37db167281 All files

$ git ls-tree -r --name-only HEAD .
c/one/first.c
c/two/second.c

尝试从之前的提交中检出已删除的java文件:

$ git checkout d62e124f -- '*.java'
error: pathspec '*.java' did not match any file(s) known to git.

1 个答案:

答案 0 :(得分:0)

据我所知,当您执行git checkout d62e124f -- '*.java'时,git使用当前的工作树来展开*.java,而不是{em> d62e124f。由于您刚刚删除了所有文件,因此没有任何匹配。

git restore --source d62e124f '*.java'

有效,因为git然后使用正确的ref来扩展通配符。

git restore仅在2.23.0以后可用,然后才能使用:

git ls-files d62e124f '*.java' | xargs git checkout d62e124f