मैं जो मैं दूर करता हूं उसके साथ मैं पैच को कैसे प्रारूपित कर सकता हूं


140

Git में, मैं अपने परिवर्तनों को दूर करता हूँ। क्या यह संभव है कि मैं जो कुछ भी निकालूं, उससे मैं एक पैच बना सकता हूं? और फिर उस पैच को किसी अन्य रिपॉजिटरी (मेरे सह-कार्यकर्ता) में लागू करें?

मुझे पता है git format-patch -1, लेकिन मुझे लगता है कि यह वही है जो मैंने किया है। लेकिन मैं उसी चीज़ की तलाश कर रहा हूं जिसमें बदलाव आया हो।

और मैं अन्य रिपॉजिटरी में पैच कैसे लगा सकता हूं?

जवाबों:


156

ज़रूर, git stash showइस का समर्थन करता है:

git stash show -p

तो, उपयोग करें

git stash list

पैच के रूप में निर्यात किए जाने वाले स्टैश की संख्या का पता लगाने के लिए, फिर

git stash show -p stash@{<number>} > <name>.patch

इसे निर्यात करने के लिए।

उदाहरण के लिए:

git stash show -p stash@{3} > third_stash.patch

1
पैच लगाने के बारे में मेरा एक संबंधित प्रश्न है। मान लीजिए कि मेरा पैच कई फाइलों को छूता है। क्या पैच को 'इंटरएक्टिवली' लागू करने का कोई तरीका है? पैच की कौन सी फाइल चुनें, मुझे पैच को किसके खिलाफ लागू करना चाहिए? क्या मै वह कर सकता हूं?
सिल्वरबर्ग

1
@ सिल्वरबर्ग: मुझे एक त्वरित नज़र man patchथी और मैंने इंटरैक्टिव पैच एप्लिकेशन के लिए कोई विकल्प नहीं देखा। हालाँकि, चूंकि पैच फाइलें सादी पाठ फाइलें स्वयं होती हैं, आमतौर पर जो कोई भी करता है वह पाठ संपादक में पैच को संपादित करने के लिए संबंधित भागों को क्लिप आउट करने के लिए संपादित करता है patch। वैकल्पिक रूप से, यदि आप पैच को किसी अन्य गिट रिपॉजिटरी में लागू कर रहे हैं, तो आप यह सब और फिर चुनिंदा git checkoutफ़ाइलों को लागू कर सकते हैं जिन्हें आप बदलना नहीं चाहते थे ( git checkoutफ़ाइल नाम के साथ अस्थिर परिवर्तन फेंकता है)।
ग्रेग हेवगिल

1
@silverburgh आप "--exclude" और "--include" git लागू करने के पैरामेट्स का उपयोग करके पैच किए गए फ़ाइलों के सेट को प्रतिबंधित कर सकते हैं।
केल्विन

@ सिल्वरबर्ग आप निम्नलिखित मान सकते हैं कि आपके पास एक पैच है। पैच को पूरी तरह से लागू करें और फिर करें git add --interactive ${YOUR_FILES}और यह आपको आंशिक रूप से प्रतिबद्ध करने का मौका देगा।
एलेक्स

15
धन्यवाद। इसने मेरे लिए काम किया:git stash show -p stash@{1} > patch.txt
रेयान

63

यह उत्तर पैच को सहेजने और जहाँ आप इसका उपयोग करना चाहते हैं, दोनों के बारे में जानकारी प्रदान करता है।

किसी फ़ाइल में आउटपुट को छिपाने के लिए:

 git stash show -p --color=never > my-patch-name.patch

सत्यापित करें कि पैच अच्छा लग रहा है:

git apply --stat my-patch-name.patch

कोई त्रुटि नहीं सत्यापित करें:

git apply --check my-patch-name.patch

पैच अप्लाई करें

git apply my-patch-name.patch

इसने मेरे लिए सादे पाठ कोड फ़ाइलों के साथ काम किया, लेकिन मुझे सफेद स्थान के लिए जिम्मेदार होना पड़ा। सत्यापित git apply --check --ignore-space-change --ignore-whitespace my-patch-name.patch करें कि पैच अच्छा लग रहा है: पैच लागू करें: git apply --ignore-space-change --ignore-whitespace my-patch-name.patch
क्रेग बोलैंड

अच्छा और संक्षिप्त विवरण। यह काम करने के लिए मुझे पैच को लागू करते समय रेपो रूट में होना चाहिए, अन्यथा git applyअंतर नहीं उठा।
मैक्स

16

उपयोग

$> git stash list
stash@{0}: WIP on master: 84fx31c Merged with change to /public/
stash@{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter

अपने हाल ही में स्टैक्ड सामान की सूची प्राप्त करने के लिए। जब आप टकराते हैं तो Git वास्तव में प्रतिबद्ध वस्तुएं बनाता है।

वे हर चीज की तरह कमिटेड हैं। आप उन्हें एक शाखा में देख सकते हैं:

$> git checkout -b with_stash stash@{0}

फिर आप इस शाखा को प्रकाशित कर सकते हैं और आप सहकर्मी को मर्ज कर सकते हैं या चेरी-पिक कर सकते हैं।


13

उपरोक्त समाधान बाइनरी डेटा के लिए काम नहीं करेंगे। निम्नलिखित इसके लिए समर्थन जोड़ें:

git stash show stash@{0} -p --binary

संपादित करें

नोट: मैं सिर्फ उपरोक्त उत्तरों के लिए एक टिप्पणी जोड़ना चाहता था लेकिन मेरी प्रतिष्ठा पर्याप्त नहीं है।


3

मेरा मानना ​​है कि यह हाल ही में Git से udpates में से एक हो सकता है। आपको उन परिवर्तनों को पैच करने की ज़रूरत नहीं है जिन्हें आपने दूर किया है। आप सिर्फ एक शाखा से दूसरी शाखा में अपने अटके हुए परिवर्तन लागू कर सकते हैं।

शाखा A पर आप कुछ बदलावों को रोक चुके हैं, जिन्हें stash @ {1} के रूप में संदर्भित किया गया है।

अब आप शाखा बी पर जाते हैं। आप बस कर सकते हैं:

$git stash apply stash@{1}

यह आपकी शाखा A, शाखा B पर परिवर्तन लागू करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.