git 如何递归地将文件恢复到特定的提交?

6yoyoihd  于 2022-12-10  发布在  Git
关注(0)|答案(2)|浏览(154)

我需要将仓库中的所有app.config文件恢复到一个特定的提交,而不管这些文件位于何处。我知道,git checkout允许将文件或文件夹恢复到一个特定的提交,但有没有方法可以递归地完成这一操作,而不需要选择所有文件或使用脚本?
我试探着:

$ git checkout <commit> -- App.config

error: pathspec 'App.config' did not match any file(s) known to git

$ git checkout <commit> -- */App.config
error: pathspec '(Folder 1)/App.config' did not match any file(s) known to git
error: pathspec '(Folder 2)/App.config' did not match any file(s) known to git
error: pathspec '(Folder 3)/App.config' did not match any file(s) known to git
error: pathspec '(Folder 4)/App.config' did not match any file(s) known to git
...

这些文件实际上 * 是 * 已知的git,因为如果我进入文件夹并执行以下操作:

git checkout <commit> -- ./App.config

它可以工作,但仅适用于此单个文件。

o3imoua4

o3imoua41#

通配符可以:

git checkout abc123 -- '**/app.config'
bxpogfeg

bxpogfeg2#

如果您能够找到选择文件的方法,则可以仅 checkout 这些文件。

git checkout some-commit -- '*.c' '*.h'

我使用引号来防止bash扩展它们。
而且,有时git之外的东西也能给予你一把:

git ls-tree --name-only -r some-revision | grep some-file-name-filter | xargs git checkout some-revision --

相关问题