Eu tenho um commit antigo que fiz algumas semanas atrás. Eu quero restaurar apenas um único arquivo dessa confirmação. O que eu faço?
git
git-checkout
Varun Achar
fonte
fonte
Respostas:
Isso não altera o HEAD, apenas substitui o arquivo local
path/to/file.txt
Veja man git-rev-parse para possíveis especificações de revisão (é claro que um simples hash (como
dd9bacb
) será bom)Não se esqueça de confirmar a alteração (após uma revisão ...)
fonte
revision-specification
vez que é o que o OP pediu :)shacommit~1
(ex:)git checkout 0f4bbdcd~1 -- path/to/file.txt
para obter o commit imediatamente antes.git checkout [Revision_Key] -- path/to/file
.fonte
git checkout
pode lidar com arquivos únicos (consulte a resposta sehe), sem necessidade de copiar e colar.HEAD
,ORIG_HEAD
ou qualquer daqueles combinado com^
/~
/@
notação de estilo.Eu precisava restaurar um arquivo recente confirmado no git. Portanto, apenas para reiterar e dar outra perspectiva, você precisa fazer isso executando as duas etapas a seguir:
git log -3
Isso mostra os três commits mais recentes. Leia os comentários e o nome do autor para restringir a versão exata que deseja. Anote esse ID de confirmação longo (ou seja, b6b94f2c19c456336d60b9409fb1e373036d3d71) para a versão de confirmação que você deseja.
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java
Passe o ID de confirmação E o nome do arquivo que deseja restaurar. Verifique se você tem um espaço antes e depois do hífen duplo.
Existem muitas outras maneiras de fazer isso. Mas este é o mais simples que me lembro. Espero que ajude.
NOTA: Se você estiver dentro do caminho / pasta do projeto, não será necessário digitar o caminho completo do arquivo no comando checkout.
fonte
Todas as respostas mencionam
git checkout <tree-ish> -- <pathspec>
. A partir do git v2.23.0, existe um novo método de restauração do git que deve assumir parte do quegit checkout
foi responsável. Veja os destaques das mudanças no blog do github .O comportamento padrão deste comando é restaurar o estado de uma árvore de trabalho com o conteúdo proveniente do
source
parâmetro (que no seu caso será um hash de confirmação).Assumindo que o hash de confirmação é
abcdef
o comando, seria assim:que (por padrão) coloca na árvore de trabalho. Se você deseja colocar a alteração diretamente no índice para que ela possa ser confirmada imediatamente:
ou com nomes curtos de opção:
fonte