2009-03-11 14 views
8

Eventuali duplicati:
Restore a deleted file in a Git repoImpossibile recuperare un file in Git

Ho due rami nella mia Git, master e newFeature. Alla diramazione newFeature, ho rimosso il fileA fisicamente primo terminale e poi in Git

git rm fileA 

Successivamente, corro

git add . 
git commit 

Adesso, devo nuovamente il fileA. Ho avuto l'idea di poterlo recuperare, semplicemente passando al ramo master. Ero apparentemente sbagliato, dal momento che non riesco a trovare il file A.

Come posso recuperare il fileA con Git?

risposta

11

In primo luogo, è necessario trovare l'ultima versione di fileA. Puoi usare "git log -p" o "git whatchanged" per controllare quando è stato cancellato, oppure puoi usare "git ls-files < revisione > - fileA" per verificare se il file è presente in un dato commit, dove '< revisione >' può essere maestro o newFeature^ (newFeature^ significa madre di newFeature).

allora avete bisogno di check it out, sia utilizzando

$ git checkout <revision> -- fileA 

o reindirizzare "git spettacolo" uscita

$ git show <revision>:fileA > fileA 

Non dimenticare di aggiungere file da Git (se necessario)!

1
@titan:~$ cd /tmp/ 
@titan:/tmp$ mkdir x 
@titan:/tmp$ git init 
Initialized empty Git repository in /tmp/.git/ 
@titan:/tmp$ echo a > a 
@titan:/tmp$ git add a 
@titan:/tmp$ git ci -m a 
Created initial commit c835beb: a 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 a 
@titan:/tmp$ git rm a 
rm 'a' 
@titan:/tmp$ git ci -m b 
Created commit de97fae: b 
1 files changed, 0 insertions(+), 1 deletions(-) 
delete mode 100644 a 
@titan:/tmp$ git whatchanged 
commit de97fae7a72375ffa192643836ec8273ff6f762b 
Date: Wed Mar 11 17:35:57 2009 +0100 

    b 

:100644 000000 7898192... 0000000... D a 

commit c835beb7c0401ec27d00621dcdafd366d2cfdcbe 
Date: Wed Mar 11 17:35:51 2009 +0100 

    a 

:000000 100644 0000000... 7898192... A a 
@titan:/tmp$ git show 7898192 
a 
@titan:/tmp$ git show 7898192 > a 
@titan:/tmp$ 
3

creare un tag o un ramo al commit prima che venisse eliminato fileA, check it out, copia fileA da qualche altra parte, poi di nuovo il checkout il ramo newFeature. Il resto dovrebbe essere piuttosto semplice.

+2

È anche possibile effettuare il checkout senza creare il ramo. –

Problemi correlati