2011-09-14 21 views
7

कहें कि मेरे पास एक निर्देशिका है जिसमें सैकड़ों फाइलें हैं। मैं उनमें से कई को संशोधित करता हूं, लेकिन बाद में मुझे एहसास हुआ कि मेरे बदलाव खराब हैं। यदि मैं करता हूं:मैं गिट चेकआउट पर केवल संशोधित फ़ाइलों को पुनर्स्थापित कैसे कर सकता हूं?

git checkout whole_folder 

तब सबकुछ फिर से चेक हो जाता है, और मुझे सब कुछ पुनः संयोजित करना होगा। क्या चेकआउट को केवल संशोधित फ़ाइलों को प्रभावित करने का कोई तरीका है, या क्या मुझे प्रत्येक फ़ाइल पर checkout चलाने की आवश्यकता है?

+0

आप 'Git चेकआउट करते हैं - ' ('Git चेकआउट का थोड़ा सुरक्षित संस्करण whole_folder') timestamps रहने उन फ़ाइलों के लिए जो वही आदेश द्वारा नहीं बदला जाता है। इसका मतलब है कि आपकी बिल्ड प्रक्रिया को अभी भी उन फ़ाइलों का पुनर्निर्माण करना चाहिए जो कम से कम सोचते हैं कि इसे mtimes पर आधारित होना आवश्यक है। –

+0

क्या आप सुनिश्चित हैं कि गिट सब कुछ जांचता है? आईआईआरसी गिट वास्तव में केवल उन फ़ाइलों को जांचने के लिए कड़ी मेहनत करता है जो संशोधित हैं और जब आप गिट चेकआउट करते हैं तो कुछ और स्पर्श नहीं करते हैं - whole_folder, या git reset - hard HEAD। – holygeek

+0

तो, मुझे 'गिट चेकआउट - whole_folder' करना चाहिए? – Geo

उत्तर

13

इस प्रयास करें:

$ git checkout `git ls-files -m` 

-m सूचियों केवल संशोधित फ़ाइलों।

+0

क्या कोई क्रॉस-प्लेटफ़ॉर्म समाधान उपलब्ध नहीं है? मैं कभी-कभी मानक 'cmd.exe' खोल से विंडोज का उपयोग कर रहा हूं। – Geo

2

क्या आप कर रहे हैं सही है, लेकिन यदि आप एक disambiguating -- सिर्फ मामले में आप एक निर्देशिका का नाम है कि एक शाखा नाम के रूप में एक ही है, यानी है जोड़ सकते हैं:

git checkout -- whole_folder 

Git केवल अद्यतन करेगा उन फ़ाइलों पर टाइमस्टैम्प जिन्हें वास्तव में बदलने की जरूरत है, इसलिए यदि आपका निर्भरता-आधारित निर्माण उपकरण mtimes का सही ढंग से उपयोग कर रहा है, तो फ़ाइलों की न्यूनतम सुरक्षित संख्या को पुनर्निर्मित किया जाना चाहिए। यदि आप अलग-अलग व्यवहार देख रहे हैं, तो यह एक बग होगा।

2

लेकिन

git checkout -- $(git ls-files -m) 

भी हटाई गई फ़ाइलें checksout।

आप केवल संशोधित फ़ाइलों चेकआउट चाहते हैं मेरे लिए यह काम:

git checkout -- $(git status -uno | grep --colour=never '#' | awk '{ print $2 $3 }' | grep --colour=never ^modified: | cut -c10-) 
+0

धन्यवाद @TheFox। यह लगभग काम किया। इसे मेरे लिए काम करने के लिए थोड़ा सा आदेश संशोधित करना पड़ा। यहां दी गई रेखा है: '' 'गिट चेकआउट - $ (गिट स्थिति | grep संशोधित: | कट-सी 14-)' '' – user1029978

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