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?
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?
Respostas:
git checkout 'master@{7 days ago}' -- path/to/file.txt
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 ...)
revision-specificationvez que é o que o OP pediu :)
shacommit~1(ex:) git checkout 0f4bbdcd~1 -- path/to/file.txtpara obter o commit imediatamente antes.
git checkout [Revision_Key] -- path/to/file.git checkoutpode lidar com arquivos únicos (consulte a resposta sehe), sem necessidade de copiar e colar.
HEAD, ORIG_HEADou 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.
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 que git checkoutfoi 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 sourceparâmetro (que no seu caso será um hash de confirmação).
Assumindo que o hash de confirmação é abcdefo comando, seria assim:
git restore --source=abcdef file_name
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:
git restore --source=abcdef --worktree --staged file_name
ou com nomes curtos de opção:
git restore -s=abcdef -W -S file_name