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-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
.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.
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 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:
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