मान लीजिए, मेरे पास मेरे भंडार की निम्न स्थिति है। क्या यह सुनिश्चित करने के लिए कि परिवर्तनों में कोई विरोध नहीं है, # 1 और # 3 को स्क्वैश करना संभव है? कैसे?

हाथ में स्थिति का चित्रमय दृश्य।

विस्तृत विवरण: प्रारंभ में, केवल एक शाखा "मुख्य" थी। तब मेरे सहयोगी ने एक शाखा "जारी" बनाई और उसे दूरस्थ रिपॉजिटरी में धकेल दिया। मैंने उसी विषय पर काम करना जारी रखा और एक नई प्रतिबद्धता जोड़ी (लेकिन इसे अभी तक आगे नहीं बढ़ाया)। फिर, कुछ समय बाद, मैं जारी रखना चाहता था, लेकिन जिन फाइलों पर मैं काम करना चाहता था, उनका हिस्सा "मुख्य" में चल रहे विकास के कारण अप्रचलित हो गया। इसलिए मैंने नए परिवर्तन प्राप्त करने के लिए "मुख्य" को "जारी" में विलय कर दिया जिसके परिणामस्वरूप विलय प्रतिबद्धता (फिर भी स्थानीय) हुई। फिर मैंने "जारी" शाखा में एक (या कुछ भी) नई स्थानीय प्रतिबद्धताएं बनाईं। इस समय मैं सर्वर में बदलावों को आगे बढ़ाने के लिए तैयार हूं, लेकिन मुझे एहसास है कि इतिहास को साफ रखने के लिए मेरे कुछ कमिट्स को एक साथ कुचला जा सकता है (या उन सभी को कहें)।

एक वैकल्पिक अनुवर्ती प्रश्न यह होगा: क्या इस तरह की स्थिति के लिए कोई बेहतर अनुशंसित कार्यप्रवाह है जब "आईएसएस" में अपना काम समाप्त करने से पहले नए परिवर्तन "मुख्य" में आते हैं?

मैं गिट के लिए नया हूं और मुझे हाल ही में निम्नलिखित उपयोग पैटर्न का सामना करना पड़ा है, जो मुझे लगता है कि एक ही परियोजना पर किसी और के साथ सहयोग करते समय काफी बार होना चाहिए। फिर भी, मुझे इस पर कोई चर्चा नहीं मिली कि इसका इलाज कैसे किया जाए।

git
1
m_eps 13 फरवरी 2021, 15:30

2 जवाब

सबसे बढ़िया उत्तर

आपके द्वारा खींचे गए ग्राफ़ के लिए:

git checkout -B iss origin/iss
git cherry-pick -n --first-parent --no-merges @..iss@{1}
git commit
git merge origin/main

यह सभी गैर-मर्ज जारी को एक में बदल देता है और फिर विलय को फिर से करता है। संचित इतिहास को मनमाने ढंग से कई कमिट्स में वितरित करने के लिए आप सब कुछ करने के लिए एक कमिट के बजाय git reset कर सकते हैं और git add -p के साथ कमिट की एक श्रृंखला चुन सकते हैं कि कौन से हंक्स रिबिल्ट कमिटमेंट में जाते हैं।

पुराने कमिट संदेश अभी भी आपके रेपो में हैं, उदाहरण के लिए यदि आप मौजूदा संदेशों को फिर से टाइप नहीं करना चाहते हैं तो आप git commit -c oldcommithash कर सकते हैं।

0
jthill 11 मार्च 2021, 21:12

जब मुख्य शाखा में नए परिवर्तन आते हैं तो आप मुख्य शाखा पर अपनी शाखा को रीबेस कर सकते हैं, आप तब मर्ज कमिट नहीं होगा। वैसे भी, आप मर्ज कमिट के साथ एक शाखा को रिबेस कर सकते हैं और वे चले जाएंगे। और सबसे शक्तिशाली विशेषता इंटरएक्टिव रिबेस (rebase -i) है जहां आप स्क्वैश कर सकते हैं, ठीक कर सकते हैं, अंतःक्रियात्मक रूप से पुन: व्यवस्थित कर सकते हैं

0
vitalyster 13 फरवरी 2021, 12:53