2009-03-11 10 views
8

Powiel możliwe:
Restore a deleted file in a Git repoNie można odzyskać plik w Git

Mam dwa oddziały w moim Git, master i newFeature. w oddziale newFeature, usunąłem fileA fizycznie najpierw w terminalu, a następnie w Git przez

git rm fileA 

Następnie biegnę

git add . 
git commit 

Teraz muszę fileA ponownie. Wpadłem na pomysł, że uda mi się go odzyskać, po prostu przełączając się na gałąź master. Najwyraźniej nie miałem racji, ponieważ nie mogę znaleźć pliku fileA.

Jak mogę odzyskać plik A z Git?

Odpowiedz

11

Najpierw musisz znaleźć miejsce, w którym masz ostatnią wersję fileA. Możesz użyć "git log-p" lub "git whatchanged", aby sprawdzić, kiedy został usunięty, lub możesz użyć "git ls-files < rewizji > - plikA", aby sprawdzić, czy plik jest obecny w danym zatwierdzeniu, gdzie '< wersja >' może być Master lub newFeature^ (newFeature^ oznacza nadrzędny newFeature).

Następnie trzeba to sprawdzić, albo za pomocą

$ git checkout <revision> -- fileA 

lub przekierować "git show" wyjście

$ git show <revision>:fileA > fileA 

Nie zapomnij dodać pliku do git (w razie potrzeby)!

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

Tworzenie znacznika lub oddział na popełnienia zanim usunięte fileA, to sprawdzić, skopiuj fileA gdzieś indziej, a następnie ponownie checkout newFeature oddział. Reszta powinna być całkiem prosta.

+2

Możesz również odebrać zamówienie bez tworzenia oddziału. –