Para fazer o checkout de qualquer arquivo com "partial / path" em seu caminho + nome de HEAD:
git checkout *partial/path*
Para fazer o checkout de arquivos de commits específicos (o --
é opcional aqui):
git checkout abcde -- full/path/to/my/file full/path/to/another/file
Contraintuitivamente, o comando a seguir faz não fazer o checkout de arquivos que correspondem ao pathspec no commit especificado:
git checkout abcde -- *partial/path*
Em vez disso, resulta em error: pathspec '*partial/path*' did not match any file(s) known to git.
Minha pergunta é: É possível usar um pathspec para fazer o check-out de vários arquivos usando pathspec de uma confirmação específica?
Observação: percebo que git checkout branch file
é provavelmente um comando completamente diferente de git checkout pathspec
(e também completamente diferente de git checkout branch
), o que pode explicar por que o pathspec não funciona aqui.
Observação: o alias a seguir só resolve parcialmente o problema:
[alias] ccps = "!f() { git ls-files $2 | xargs -I {} git checkout $1 -- \"{}\"; }; f"
Isso falha quando um ou mais arquivos foram adicionados ou removidos, correspondendo o pathspec entre a confirmação atual e a confirmação de destino.
UPDATE: O seguinte apelido (tipo de) faz o que eu quero:
[alias] ccps = "!f() { git ls-tree -r --name-only $1 | grep $2 | xargs -I {} git checkout $1 -- {}; }; f"
Problemas com esta solução:
-
grep $2
não é o mesmo que um pathspec (não funcionará com .
e ..
e *
).
- É bastante lento (demorou ~ 5 segundos para sequencialmente
git checkout
57 arquivos retornados de grep
).
Mas, ao mesmo tempo, agora tenho acesso à regex, o que é uma vantagem.