2009-03-11 8 views
8

Можно создать дубликат:
Restore a deleted file in a Git repoНевозможно восстановить файл в Git

У меня есть две ветви в моей Git, мастер и newFeature. В филиале newFeature, я удалил FiLea физически первой в терминале, а затем в Git с помощью

git rm fileA 

Впоследствии я бегу

git add . 
git commit 

Прямо сейчас, мне нужно FiLea снова. У меня возникла идея, что я могу вернуть его, просто переключившись на ветвь мастер. Я был явно не прав, так как я не могу найти файл A.

Как я могу получить файл обратно с Git?

ответ

11

Во-первых, вы должны найти, где у вас есть последняя версия fileA. Вы можете использовать «git log -p» или «git whatchanged», чтобы проверить, когда он был удален, или вы можете использовать «git ls-files < ревизия > - fileA», чтобы проверить, присутствует ли файл в данной фиксации, где '<> редакция' может быть мастером или newFeature^ (newFeature^ означает родительский newFeature).

Затем вам нужно проверить его, либо с помощью

$ git checkout <revision> -- fileA 

или перенаправлять «мерзавец шоу» выход

$ git show <revision>:fileA > fileA 

Не забудьте добавить файл в мерзавец (при необходимости)!

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

Создать тег или ветвь на фиксации перед удалением FiLea, проверить его, скопировать FiLea где-то еще, то проверка на newFeature ветвь снова. Остальное должно быть довольно простым.

+2

Вы также можете git checkout без создания филиала. –