वे रिपो में पाँचवें कमिट को रीसेट करते हैं, फिर मास्टर ब्रांच में मर्ज करते हैं।
वर्तमान ब्रांच का हेड पाँच कमिट्स पिछले में रीसेट किया जाता है, फिर पिछले कमिट्स को एक ही कमिट में स्क्वॉश किया जाता है।
आखिरी पाँच कमिट्स को हटा देते हैं।
आखिरी पाँच कमिट्स को एक नई शाखा में मर्ज किया जाता है।
स्पष्टीकरण:
git reset --hard HEAD~5 वर्तमान ब्रांच को पिछले 5 कमिट्स से पहले के कमिट्स में रीसेट करता है (इस man gitrevisions के नोटेशन और अन्य कुल विकल्पों के बारे में विवरण के लिए देखें, जैसे HEAD@{2 दिन पहले})। यह एक हार्ड रीसेट है, इससे यह प्रत्येक परिवर्तन को कार्य वृक्षी में भी अधिलिखित करेगा। man git-reset देखें।
git merge --squash HEAD@{1} HEAD@{1} वहाँ है जहाँ कमांड करने से पहले शाखा थी (फिर से देखें man gitrevisions)। यह कमांड सूची की स्थिति को सेट करता है जैसा कि ऐसा लगता है जैसे उस कमिट से मर्ज किया गया हो। यह पूरा प्रक्रिया नई विशेषता शुरू करने वाले एक शाखा में से 5 कमिट्स ले लेने का एक तरीका हो सकता है और उन्हें एक ही कमिट में, एक सार्थक कमिट में, स्क्वॉश किया जा सकता है।
प्रश्न 4. आपके वर्तमान परियोजना में कई शाखाएं हैं; मास्टर, बीटा, और पुश-सूचनाएं। आपने अभी पुश-सूचना शाखा में सूचना की सुविधा समाप्त की है, और आप इसे बीटा शाखा में संशोधित करना चाहते हैं। इसे आप कैसे प्राप्त करेंगे?
पुश-सूचना शाखा चेकआउट करें और गिट मर्ज बीटा चलाएं
मास्टर शाखा चेकआउट करें और गिट मर्ज बीटा -> पुश-सूचनाएं
पुश-सूचनाएं शाखा को हटाएं और यह मास्टर शाखा में स्वचालित रूप से संशोधित किया जाएगा
बीटा शाखा चेकआउट करें और गिट मर्ज पुश-सूचनाएं चलाएं
विशेषतः-उपयोगकर्ता-स्थान शाखा पर रिलीज के लिए टैग किया जा रहा है
एक कमिट को उसके मूल शाखा से फीचर-उपयोगकर्ता-स्थान शाखा पर कॉपी किया जा रहा है
कमिट नया हेड के रूप में चेरी पिक किया जा रहा है
एक कमिट फीचर-उपयोगकर्ता-स्थान शाखा से मास्टर शाखा पर कॉपी किया जा रहा है
शाखा को फीचर-उपयोगकर्ता-स्थान शाखा पर स्विच किया जा रहा है, और निर्दिष्ट कमिट को शाखा पर लागू किया जा रहा है।
स्पष्टीकरण:
'git checkout feature-user-location' शाखा को 'feature-user-location' शाखा पर स्विच करता है।
'git cherry-pick kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231' निर्दिष्ट कमिट ('kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231') से परिवर्तनों को वर्तमान शाखा (feature-user-location) में लागू करता है। यह प्रभावी रूप से कमिट को उसकी मूल शाखा से फीचर-उपयोगकर्ता-स्थान शाखा पर कॉपी करता है।
इसलिए, यह कमांड्स का क्रम एक विशेष कमिट को फीचर-उपयोगकर्ता-स्थान शाखा पर चेरी-पिक कर रहा है।
Q8. निम्नलिखित कमांड गिट रिपॉजिटरी के साथ क्या करता है?
git reset --soft HEAD^
यह सभी पिछले कमिट्स को हटा देता है और रिपॉजिटरी का इतिहास उसकी प्रारंभिक स्थिति में रीसेट करता है।
यह काम की शाखा को पहले कमिट पर रीसेट करता है।
यह हेड को वर्तमान कमिट पर रखता है लेकिन सभी पिछले कमिट्स को साफ करता है।
यह हेड को पिछले कमिट पर सेट करता है और कमिट में किए गए बदलावों को स्टेज/इंडेक्स में छोड़ देता है।
'#' से शुरू होने वाली एक पंक्ति टिप्पणी के रूप में काम करती है। इसलिए # .swift कुछ नहीं करता है। 'man gitignore' देखें।
Q17. जब आप अपने लोकल रिपॉजिटरी में बदलाव करते हैं, तो आप निम्नलिखित कमांड चलाते हैं। यह क्या करेगा?
git commit -a -m "Refactor code base"
कुछ नहीं, आप एक ही कमांड में एकाधिक विकल्पों का उपयोग नहीं कर सकते
सभी नई फ़ाइलों को स्टेजिंग क्षेत्र में जोड़ता है
सभी नई फ़ाइलों को एक संदेश के साथ कमिट करता है
सभी संशोधित फ़ाइलों को स्टेजिंग क्षेत्र में जोड़ता है, फिर उन्हें एक संदेश के साथ कमिट करता है
Q18. जब आप अपना गिट स्थिति चेक करते हैं तो आपको निम्नलिखित आउटपुट मिलता है, जो कि फ़ाइल beta-notes.js को कमिट में दिखाता है लेकिन अस्थायी रूप से भी नहीं है। यह स्थिति कैसे आ सकती है?
Change to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: beta-notes.js
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout --<file>..." to discard changes in working directory)
modified: beta-notes.js
beta-notes.js के दो प्रतिलिपियाँ थीं, लेकिन उनमें से एक को हटा दिया गया था
beta-notes.js को स्टेजिंग किया गया था, फिर बाद में संशोधित किया गया था, जिससे फ़ाइल के दो विभिन्न संस्करण बने
beta-notes.js की दो प्रतिलिपियाँ बनाई गईं, लेकिन केवल एक को ट्रैक किया जाता है
beta-notes.js की दो ट्रैक की गई प्रतिलिपियाँ थीं, लेकिन एक को कमिट से हटा दिया गया था