我无法使用通配符检出文件,如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.
答案 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