2009-03-11 12 views
8

में एक फ़ाइल को ठीक करने में असमर्थ:
Restore a deleted file in a Git repoसंभव डुप्लिकेट Git

मैं अपने Git में दो शाखाओं, मास्टर और newFeature है। शाखा newFeature में, मैं fileA Git में

git rm fileA 

द्वारा बाद में हटा दिया शारीरिक रूप से टर्मिनल में पहले और उसके बाद, मैं

git add . 
git commit 

चलाने अभी, मैं फिर से fileA की जरूरत है। मुझे यह विचार था कि मैं इसे शाखा मास्टर पर स्विच करके इसे वापस प्राप्त कर सकता हूं। मैं स्पष्ट रूप से गलत था, क्योंकि मुझे फ़ाइल ए नहीं मिल रहा है।

मैं फ़ाइल को वापस गिट के साथ कैसे प्राप्त कर सकता हूं?

उत्तर

11

सबसे पहले, आपको यह पता होना चाहिए कि आपके पास fileA का अंतिम संस्करण कहां है। जब आप इसे हटाए गए थे, तो जांचने के लिए आप "गिट लॉग-पी" या "गिट व्हाट्वार्क्ड" का उपयोग कर सकते हैं, या आप "git ls-files < संशोधन > - fileA" का उपयोग कर सकते हैं यह जांचने के लिए कि फ़ाइल में दी गई प्रतिबद्धता में मौजूद है या नहीं, जहां '< संशोधन >' मास्टर या newFeature^ (newFeature^ मतलब है की मूल newFeature) हो सकता है।

तो आप या तो

$ git checkout <revision> -- fileA 

का उपयोग कर या redirect "Git शो" उत्पादन

$ git show <revision>:fileA > fileA 

Git करने के लिए फ़ाइल जोड़ने के लिए (यदि आवश्यक) मत भूलना यह बाहर की जाँच करने की जरूरत है,!

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

आप शाखा बनाने के बिना चेकआउट भी गिट कर सकते हैं। –

संबंधित मुद्दे