git recuperar arquivo deletado onde nenhum commit foi feito após a delete

Apaguei alguns ficheiros.

Ainda não me comprometi.

Quero reiniciar o meu espaço de trabalho para recuperar os ficheiros.

eu fiz um git checkout ..

mas os ficheiros apagados ainda estão em falta.

e git status mostra:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    cc.properties
#   deleted:    store/README
#   deleted:    store/cc.properties
#

porque é que git checkout . não repõe o espaço de trabalho em HEAD?

 621
git
Author: LostMyGlasses, 2012-08-14

20 answers

A saída diz-lhe o que precisa de fazer. git reset HEAD cc.properties etc.

Isto vai libertar a operação rm. Depois disso, executar um {[2] } novamente lhe dirá que você precisa fazer um git checkout -- cc.properties para obter o arquivo de volta.

Actualizar: Tenho isto no meu ficheiro de configuração.

$ git config alias.unstage
reset HEAD
Que costumo usar para soltar coisas.
 638
Author: Noufal Ibrahim, 2014-03-03 17:55:49
Encenou a eliminação, por isso tem de fazer:
git checkout HEAD cc.properties store/README store/cc.properties

git checkout . apenas verifica a partir do índice onde a supressão já foi encenada.

 168
Author: CB Bailey, 2012-08-14 16:31:12
Apenas faça git checkout path/to/file-I-want-to-bring-back.txt
 134
Author: seddonym, 2014-01-23 11:57:05

Para recuperar todas as supressões não realizadas de uma só vez, automaticamente, sem especificar cada caminho:

git ls-files -d | xargs git checkout --

Para recuperar todos encenados de uma só vez, automaticamente, sem especificar cada caminho:

git status | grep 'deleted:' | awk '{print $2}' | xargs git checkout --
 115
Author: PaoloC, 2014-11-12 17:29:51

Já que estás a fazer um {[[0]}, parece que estás a tentar restaurar o teu ramo de volta ao último estado de commit.

Você pode conseguir isso com um git reset HEAD --hard

Aviso

Fazer isto pode remover todas as suas últimas modificações e desatar as suas modificações, por exemplo, você pode perder o trabalho. Pode ser o que quiser, mas veja os documentos para ter a certeza.

 66
Author: Paul T, 2015-10-30 19:34:40

Se usou

git rm filename

Para apagar um ficheiro, então

git checkout path/to/filename

Não funciona, então nesse caso

git checkout HEAD^ path/to/filename

Deve funcionar

 35
Author: Aurangzeb, 2018-09-14 10:37:40
Aqui está o comando que me ajudou no meu mac. Tentei algumas das outras soluções, mas não funcionaram para mim.

Versão Git do OSX Mavericks

mac-pro:main chris$ git version
git version 1.8.5.2 (Apple Git-48)

Comando

git checkout HEAD -- path/to/file/file.cc
 26
Author: Chris Hinshaw, 2014-09-30 13:06:11
git checkout HEAD -- client/src/pp_web/index.cljs
 16
Author: Dustin Getz, 2015-04-17 20:51:46

Se quiser restaurar todos os ficheiros de uma vez

Lembre-se de usar o período Porque ele diz ao git para pegar todos os arquivos.

Este comando irá reiniciar a cabeça e libertar todas as alterações:

$ git reset HEAD . 

Então execute isso para restaurar todos os arquivos:

$ git checkout .
Então, fazendo um git status, você terá:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
 14
Author: Casper Wilkes, 2015-02-10 14:39:55

Você pode querer ver isto

Isto aplica-se aos casos em que usaste

git checkout -- .
Antes de cometeres alguma coisa.

Você também pode querer se livrar de arquivos criados que ainda não foram criados. E tu não os queres. Com:

git reset -- .
 8
Author: Paulo Linhares - Packapps, 2017-05-23 12:10:54

Encontrou esta publicação ao procurar respostas sobre como remover um ficheiro que foi apagado na minha pasta de trabalho após uma junção do ramo de outro. Ainda não foi feita nenhuma persistência após a junção. Uma vez que era uma fusão em andamento, eu não poderia simplesmente adicioná-lo de volta usando:

$ git reset <commitid#-where-file.cpp-existed> file.cpp

Tive de dar mais um passo para além da reinicialização para trazer o ficheiro de volta:

$ git checkout -- file.cpp
 5
Author: user2453404, 2015-09-15 19:23:48

Utilizar git ls-files para obter ficheiros apagados(-d) ou modificados (- m).

git checkout $(git ls-files -d)

Ver Como posso restaurar apenas os ficheiros modificados numa saída do git?

 5
Author: rickfoosusa, 2018-06-20 01:38:56

Se não tiver cometido quaisquer alterações, tudo o que tem de fazer é guardar essas alterações e voltará ao último commit a funcionar.

git stash
git stash clear
git clean 
 4
Author: Rick, 2015-03-08 22:23:43

Se está à procura de uma pasta apagada.

 git checkout ./pathToDir/*
 3
Author: PPB, 2015-06-08 13:52:56

Se instalou o ToroiseGIT, basta seleccionar " reverter..."item do menu de contexto da pasta-mãe.

 1
Author: Vasyl Shyrochuk, 2014-12-07 16:12:26
Para mim, o que funcionou foi git checkout {SHA1 of commit with version to restore} "{path to file to restore}"

Por exemplo git checkout 5a6b3179e58edff9c90326b9a04284b02fd67bd0 "src-ui/views/includes/radar.pug"

(executado no ramo em que queremos que o ficheiro entre)

Depois desse comando ser executado, o ficheiro restaurado existirá no local original (que terá de ser enviado)

 1
Author: Dinis Cruz, 2016-06-08 13:44:14
Eu estava à procura de uma resposta para isso e descobri que um simples
git checkout ./*
Está bem.
 1
Author: Henrique Florêncio, 2018-04-11 20:58:30
Tive o mesmo problema, mas nenhuma das soluções acima funcionou comigo. O que acabei por fazer foi: - crie um ficheiro vazio com o mesmo nome
- compare este ficheiro com o seu histórico local
- copiar o histórico para o ficheiro vazio.
 0
Author: theEUG, 2016-12-05 09:32:05

Também apaguei todos os meus ficheiros por acidente e repus o seguinte comando:

$ git config alias.unstage
$ git checkout HEAD^ *
 0
Author: Sarvar Nishonboyev, 2017-09-12 14:14:02

1.Encontre a persistência em particular à qual deseja reverter usando:

   git log
This command will give you a list of commits done by you .

2.Reverter para essa persistência usando:

    git revert <commit id> 

Agora o seu ramo local teria todos os ficheiros em particular

 -1
Author: ashu17188, 2017-03-09 12:22:18