2009-11-24 14 views
33

कहें कि मैंने कई काम किए हैं और चेरी को चुनना चाहते हैं जो मैं रिमोट रिपोजिटरी को दबाता हूं। मैं यह कैसे कर सकता हूं (एसीआईआई: सी 1-> सी 2-> सी 3-> सी 4 और मैं सी 2 और सी 4 को धक्का देना चाहता हूं)। रीबेज, रीसेट करने, पुश करने और फिर काम को रीसेट करने के साथ फिर से काम करेगा? (सी 1-> सी 2-> सी 3-> सी 4 => सी 2-> सी 4-> सी 1-> सी 3 => सी 4 => पुश => सी 3 रीसेट करें)। क्या कोई अच्छा रास्ता है?गिट: एक सिंगल प्रतिबद्धता को दबाएं

+0

हाँ, आप इतिहास को फिर से लिखने सकते हैं (या आवश्यक इतिहास के साथ अलग शाखा बनाने) और फिर धक्का। यही एकमात्र रास्ता है। –

+3

मैं भी एक ही मुद्दे की तलाश में था। यह संसाधन उपयोगी हो सकता है https://miteshshah.github.io/linux/git/how-to-push-single-commit-with-git/ –

उत्तर

20

यदि आपके पास निजी शाखा में आपका काम है, तो आप चेरी निजी शाखा से काम कर सकते हैं और उन्हें आधिकारिक शाखा में लागू कर सकते हैं। इस बिंदु पर अब आप अपने सभी कामों को आधिकारिक शाखा (जो सबसेट जिसे आपने पहले चुना था) पर धक्का दे सकते हैं।

+2

या यदि आप आधिकारिक शाखा में रहते हैं तो आप चेरी को अस्थायी शाखा में ले जा सकते हैं और इसे दूरस्थ आधिकारिक शाखा में डाल सकते हैं। Ummm ... है ना? – andho

+0

IMHO सबसे सरल और सबसे उपयोग करने योग्य तकनीक। – Benj

3

आईआईआरसी, गिट विचारों को काम करने के तरीके के कारण, सी 4 में निहित रूप से सी 3 शामिल है, इसलिए "सी 4 को धक्का देना लेकिन सी 3 नहीं" की अवधारणा गिट (और इसी प्रकार सी 2 के सापेक्ष सी 2) को समझ में नहीं आता है। (this previous question का उत्तर देखें।)

+2

असत्य! सी 4 अपने माता-पिता के रूप में सी 3 संदर्भित करता है, लेकिन दूसरा उत्तर अधिक सही है: आप चेरी चुन सकते हैं इतिहास से बाहर निकल सकते हैं और उन्हें विभिन्न माता-पिता के लिए लागू कर सकते हैं। –

+0

सी 4 की तरह यह अधिक नहीं है कि यह सी 3 में परिवर्तनों को लागू करता है लेकिन सी 4 के बदलाव स्वयं ही हैं। – andho

+7

'सी 4' पर 'गिट चेरी-पिक' का उपयोग करके इसे एक अलग शाखा में लागू करने के लिए नई शाखा पर 'सी 4' नहीं बल्कि 'सी 4', एक अलग (लेकिन समान) प्रतिबद्धता होगी। यदि कोई व्यक्ति बाद में 'सी 4' वाली शाखा में विलय कर लेता है, तो समस्याएं उत्पन्न हो सकती हैं। – Amber

49

आप देख रहे हैं क्या: http://blog.dennisrobinson.name/push-only-one-commit-with-git/

नोट्स::

git push origin commit-id:master 

क्रेडिट को जाता है

  • धकेल एक धक्का यह करने से पहले सभी प्रतिबद्ध प्रतिबद्ध (के रूप में एम्बर कहा)। कुंजी आपके काम (git rebase -i) को फिर से व्यवस्थित करना है, इसलिए वे हैं जिन्हें आप उन्हें धक्का देना चाहते हैं।
  • सुझाई गई शाखा + चेरी-पिक विधि (मिडटीबी द्वारा सुझाई गई) भी काम करती है, लेकिन जब आपको आवश्यकता नहीं होती है तो फेंकने वाली शाखाएं क्यों बनाएं।
  • commit-id को sha1 होना आवश्यक नहीं है। से पहले सबकुछ धक्का देने के लिए पिछले एन काम करता है, commit-id के स्थान पर "HEAD ~ N" का उपयोग करें।
+5

यह स्वीकार्य उत्तर होना चाहिए। +1 धन्यवाद। –

6
$ git push <remote name> <commit hash>:<remote branch name> 

# Example: 
$ git push origin 2dc2b7e393e6b712ef103eaac81050b9693395a4:master 
+2

कृपया अपने उत्तर के साथ कुछ टिप्पणियां जोड़ें इससे अनदेखा करना आसान हो जाएगा ... –

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