सामग्री पर जाएं
GitTree

पाठ 19 · इतिहास और एकीकरण

तेजी से आगे बढ़ने वाले मर्ज को समझें

कोई अन्य कमिट बनाए बिना लक्ष्य शाखा को मौजूदा वंशज डार्क-पैलेट कमिट में ले जाएं। उस तेजी से आगे बढ़ने की तुलना एक अलग इनपुट से करें जिसे अस्वीकार करना होगा।

प्रगति इस ब्राउज़र में सहेजी गई.

चलाने से YouTube से वीडियो लोड होता है (गोपनीयता-उन्नत मोड)।

अंग्रेजी कथन · English and Arabic कैप्शन

वीडियो पेज खोलेंयूट्यूब पर देखें

आप क्या सीखेंगे

  • पूर्वज आवश्यकता को पहचानें.
  • तेजी से आगे बढ़ने के बाद समान टिप आईडी साबित करें।
  • रेफरी मूवमेंट को प्रतिबद्ध निर्माण से अलग करें।
  • विचलन पर इनकार की भविष्यवाणी करें।

शुरू करने से पहले

पाठ 18 के परिणाम की एक अलग प्रति से प्रारंभ करें (मुख्य मर्ज है, साफ़): उस कमिट पर परिदृश्य/एफएफ-लक्ष्य बनाएं, फिर उसी कमिट पर फीचर/डार्क-मोड बनाएं; डार्क पैलेट को फीचर पर एक कमिट डी मिलता है। विलय से पहले परिदृश्य/एफएफ-लक्ष्य पर लौटें।

वीडियो को Git 2.52.0 और GitTree 2.0 के साथ Ubuntu 24.04 पर रिकॉर्ड किया गया था: डार्क पैलेट, इसकी प्रतिबद्धता, चेकआउट और दोनों मर्ज ऐप में किए गए थे; दो परिदृश्य शाखाएँ और चेक टर्मिनल में चले, और इनकार ऐप में और फिर टर्मिनल में दिखाया गया। macOS या Windows पर कुछ भी नहीं चलाया गया, और Ubuntu ही एकमात्र Linux सिस्टम रिकॉर्ड किया गया है। GitTree का स्रोत Git फ़्लोर 2.39.0 है।

GitTree आपसे साइन इन करने के लिए कहता है; फिर नि:शुल्क योजना यहां हर चरण को कवर करती है। किसी प्रदाता खाते, प्रो/ट्रायल, एपीआई क्रेडेंशियल या इंटरनेट सेवा की आवश्यकता नहीं है। स्थानीय मूल उत्पत्ति GitLab या सीआई नहीं है। सभी पहचान example.com का उपयोग करती हैं; इस पाठ को कभी भी स्रोत चेकआउट के अंदर न चलाएँ।

समान इनपुट पर या तो GitTree या मूल पथ के माध्यम से उत्परिवर्तन करें, दोनों लगातार नहीं। केवल पढ़ने योग्य सत्यापन का पालन किया जा सकता है। टर्मिनल कार्य के रूप में वर्णित किसी भी तैयारी को मूल तैयारी का लेबल दिया जाता है, कभी भी एक आविष्कृत ऐप सुविधा नहीं।

अवधारणा और राज्य प्रभाव

तेजी से आगे बढ़ना तब संभव है जब लक्ष्य टिप आने वाली टिप का पूर्वज हो। लक्ष्य लेबल को वंशज की ओर ले जाने से मर्ज कमिट का आविष्कार किए बिना हस्तक्षेप करने वाले स्नैपशॉट शामिल हो जाते हैं।

परिणामी टिप में D की मौजूदा पहचान और माता-पिता हैं। पिछला एम पाठ 18 से दो-अभिभावक विलय बना हुआ है; इसके माता-पिता को न गिनें और उन्हें इस पाठ द्वारा निर्मित एक नया मर्ज समझने की भूल न करें।

तेजी से आगे बढ़ना केवल एक नीतिगत द्वार है, सभी शाखाओं के लिए मरम्मत नहीं। यदि एक अलग लक्ष्य प्रतिबद्धता मौजूद है, तो दोनों युक्तियों का अद्वितीय इतिहास है और यह मोड अस्वीकार कर देता है।

केवल लक्ष्य शाखा/प्रमुख/सूचकांक/कार्य अग्रिम एम→डी। फ़ीचर डी रहता है, मर्ज द्वारा कोई नई प्रतिबद्धता नहीं बनाई जाती है, सर्वर अपरिवर्तित रहता है।

सटीक प्रोजेक्ट स्थिति तैयार करें

प्रोजेक्ट की एक अलग सामान्य प्रति से शुरुआत करें क्योंकि पाठ 18 ने इसे छोड़ दिया है। मूल गिट्री-विशेषताएं संरक्षित रहती हैं; इस परिदृश्य को मूल या स्रोत चेकआउट में न चलाएं। (पाठ्यक्रम की एक पूर्व योजना में एक अलग शुरुआती चेकपॉइंट नाम दिया गया था; वीडियो पाठ 18 के परिणाम और समान चरणों का उपयोग करता है।) नीचे दी गई स्टाइलशीट प्रोजेक्ट की स्टाइल.सीएसएस है जिसमें एक डार्क पैलेट ब्लॉक जोड़ा गया है। रेपो-लोकल डेमो साइनिंग बंद है और GitTree डेमो <demo@example.com> पहचान है।

पूर्ण फ़ाइल इनपुट

केवल नीचे नामित चरण पर ही सहेजें। ये अंतिम नई लाइन के साथ पूर्ण UTF-8/LF निकाय हैं; कभी भी मार्कडाउन बाड़ चिपकाएँ नहीं। अपरिवर्तित चलने योग्य फ़ाइलें नामित इनपुट प्राप्त करती हैं। अलग-अलग संस्करणों में मूल को अधिलेखित नहीं किया जाना चाहिए।

स्टाइल्स.सीएसएस - डार्क

फ़ाइल अंश · css
:root {
  color-scheme: light;
  --page: #f7f8fa;
  --surface: #ffffff;
  --text: #17212e;
  --link: #154ab5;
  --line: #bac4d0;
}

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  background: var(--page);
  color: var(--text);
  font: 1rem/1.6 system-ui, sans-serif;
}

a {
  color: var(--link);
}

.site-header,
main,
footer {
  width: min(68rem, 100% - 2rem);
  margin-inline: auto;
}

.site-header {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 1rem;
  padding-block: 1rem;
}

.hero {
  max-width: 48rem;
  padding-block: 3rem;
}

h1 {
  font-size: clamp(2rem, 5vw, 3.5rem);
  line-height: 1.2;
}

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
  gap: 1rem;
}

.feature-card {
  padding: 1rem;
  border: 1px solid var(--line);
  border-radius: 0.75rem;
  background: var(--surface);
}

section {
  margin-block-end: 2rem;
}

button,
input {
  font: inherit;
}

button,
input {
  padding: 0.5rem 0.75rem;
}

:focus-visible {
  outline: 3px solid var(--link);
  outline-offset: 3px;
}

form {
  display: grid;
  max-width: 28rem;
  gap: 0.5rem;
}

:root[data-theme="dark"] {
  color-scheme: dark;
  --page: #121923;
  --surface: #1b2635;
  --text: #edf2f8;
  --link: #a4c6ff;
  --line: #7388a1;
}

GitTree में

पैलेट: Command+Shift+P (Ubuntu पर Ctrl+Shift+P); सटीक नामित कमांड टाइप करें और उसका चयन करें। नामांकित-रेफ क्रियाएँ उस पंक्ति के संदर्भ मेनू का उपयोग करती हैं, तर्क-मुक्त पैलेट शॉर्टकट का नहीं।

  1. परिदृश्य/एफएफ-लक्ष्य और फीचर/डार्क-मोड को नीचे दी गई अलग प्रतिलिपि में तैयार करें; फीचर पर पूरा डार्क सेव करें।
  2. करतब के रूप में केवल style.css को प्रतिबद्ध करें: डार्क पैलेट जोड़ें; फ़ीचर डी सत्यापित करें.
  3. लोकल के अंतर्गत scenario फ़ोल्डर खोलें, राइट-क्लिक करें ff-target → Checkout scenario/ff-target; सत्यापित करें कि यह अभी भी एम पर है और साफ है।
  4. लोकल के अंतर्गत feature फ़ोल्डर खोलें, राइट-क्लिक करें dark-mode → Merge feature/dark-mode into scenario/ff-target; संवाद में स्रोत और लक्ष्य की समीक्षा करें।
  5. Record it as में Fast-forward only चुनें; हमेशा एक मर्ज कमिट का चयन न करें।
  6. एक बार मर्ज चुनें और प्रतीक्षा करें। मौजूदा डी तक पहुंचने के लिए लक्ष्य लेबल की अपेक्षा करें।
  7. लक्ष्य और सुविधा के वास्तविक पूर्ण SHAs की तुलना करें, फिर DARK और साफ़ कार्य का निरीक्षण करें।
  8. एक अलग अलग प्रतिलिपि में (इसे नए टैब और हालिया रिपॉजिटरी से खोलें) मर्ज को केवल फास्ट-फॉरवर्ड के साथ दोहराएं: ऐप मना कर देता है और कहता है कि लक्ष्य में ऐसे बदलाव हैं जो आपके पास अभी तक नहीं हैं। विहित मूल को अछूता छोड़ दें।

प्रत्येक सामान्य प्रतिबद्धता के लिए: सारांश बताया गया विषय है; विवरण रिक्त; पिछली प्रतिबद्धता में संशोधन करें, हुक छोड़ें, हस्ताक्षरित-ऑफ-बाय, अलग लेखक जोड़ें, प्रतिबद्धता के बाद पुश करें और खाली प्रतिबद्धता को अनुमति दें; कोई सह-लेखक नहीं. केवल नामित फ़ाइलों को चरणबद्ध करें, फिर एक बार एन फ़ाइलों में परिवर्तन करें (एक के लिए फ़ाइल), या विकल्प के रूप में कमांड+एंटर करें। वास्तविक परिणाम की प्रतीक्षा करें. एक पाठ जो स्पष्ट रूप से संशोधन करता है वह केवल उस बताए गए विकल्प को बदलता है।

टर्मिनल में

पाठ 18 के परिणाम की अलग प्रति में:

Command · bash
git switch --create scenario/ff-target
git switch --create feature/dark-mode

संपूर्ण DARK स्टाइलशीट को styles.css पर रखें, फिर:

Command · bash
git add -- styles.css
git commit --quiet -m "feat: add the dark palette"
git switch --quiet scenario/ff-target
git merge --quiet --ff-only feature/dark-mode
git rev-parse HEAD feature/dark-mode
git log -1 --format=%s
git status --short

SHA क्वेरी दो समान वास्तविक आईडी देती है। अवलोकन किया गया विषय:

आउटपुट
feat: add the dark palette

स्थिति रिक्त. फिक्स्चर ने दावा किया कि लक्ष्य पहले से मापे गए डी के बराबर है, न कि नए बनाए गए मर्ज नोड के। परिवर्तित इनपुट के लिए, विलय से पहले किसी अन्य प्रतिलिपि में लक्ष्य के लिए एक स्वतंत्र दस्तावेज़/एकीकरण-नोट.एमडी कमिट जोड़ें; एफएफ-ओनली दोनों शाखाओं को संरक्षित करते हुए मना कर देता है। पॉलिसी चेक को हरा बनाने के लिए चुपचाप एक अलग मोड का चयन न करें।

नतीजा

Where you end: परिदृश्य/एफएफ-लक्ष्य और फीचर/डार्क-मोड नाम समान मौजूदा डी। लक्ष्य हेड/इंडेक्स/कार्य में डार्क शामिल है, कोई नया मर्ज नोड नहीं, मूल मुख्य/एम अपरिवर्तित है।

सामान्य गलतियाँ

  • किसी भी ग्राफ़िकल लाइन को कॉल करके एक नई मर्ज कमिट में शामिल हों।
  • वैकल्पिक फलक को मूल चेकपॉइंट के रूप में मानना।
  • ऐप की सफलता के बाद पूर्ण उत्परिवर्तन को दोहराया जा रहा है।

अगर कुछ गलत होता है

यदि मना कर दिया जाता है, तो दोनों इतिहासों का निरीक्षण करें और समीक्षा के बाद ही एक अलग मर्ज/रीबेस वर्कफ़्लो चुनें। इनकार से ही कोई लक्ष्य फ़ाइल या रेफरी नहीं बदलती।

अपनी समझ की जाँच करें

प्रत्येक प्रश्न का उत्तर दें, फिर क्यों पढ़ें। "आवश्यक" चिह्नित प्रश्न पाठ को पूरा करने में गिने जाते हैं।

  1. प्रश्न 1 में से 6

    क्या आवश्यक है?

    एक उत्तर चुनें.

  2. प्रश्न 2 में से 6

    कौन सा शुल्क?

    लागू होने वाला प्रत्येक उत्तर चुनें.

  3. प्रश्न 3 में से 6
    आवश्यक

    परिणामी लक्ष्य SHA?

    एक उत्तर चुनें.

  4. प्रश्न 4 में से 6
    आवश्यक

    स्वतंत्र लक्ष्य प्रतिबद्धता जोड़ी गई: केवल एफएफ?

    एक उत्तर चुनें.

  5. प्रश्न 5 में से 6

    ओल्ड एम के दो माता-पिता हैं: इस क्रिया के विलय का प्रमाण?

    एक उत्तर चुनें.

  6. प्रश्न 6 में से 6
    आवश्यक

    पूर्णता क्या सिद्ध करती है?

    लागू होने वाला प्रत्येक उत्तर चुनें.

6 में से 0 सही

पाठ को पूरा करने के लिए आवश्यक प्रश्नों के सही उत्तर दें।

इस ब्राउज़र में चेक किया गया.

अभ्यास करें

साबित करें कि लक्ष्य टिप मौजूदा डी के बराबर है और कार्य पूर्ण डार्क से मेल खाता है। एक अलग प्रतिलिपि में एक स्वतंत्र लक्ष्य प्रतिबद्धता के बाद इनकार की भविष्यवाणी करें; इनकार के बाद पुराने रेफरी की तुलना करें।

आपकी अपनी पुष्टि: साइट आपका कंप्यूटर नहीं देख सकती।

पाठ को पूरा करने के लिए आवश्यक प्रश्नों के सही उत्तर दें और व्यावहारिक अभ्यास की पुष्टि करें।

पुनर्कथन

  • पूर्वजों का रिश्ता तेजी से आगे बढ़ने की अनुमति देता है।
  • आने वाली कमिट अपनी आईडी रखती है।
  • एफएफ-ओनली विचलन से इनकार करता है।

शब्दावली शब्द प्रस्तुत किये गये

तेजी से आगे बढ़ना - تقديم سريع; वंशज - تابع; पूर्वज - سلف.

वीडियो प्रतिलेख

वीडियो का वर्णन, संकेत दर संकेत।

प्रतिलिपि दिखाएँ
  1. सटीक चौकी से प्रारंभ करें.
  2. शाखा का नाम, सूचकांक और कार्यशील संस्करण।
  3. केवल पृथक पाठ्यक्रम प्रति ही तैयार करें।
  4. दोनों शाखाओं के नाम प्रारंभ करें एक ही प्रतिबद्धता पर.
  5. वास्तविक पैलेट परिवर्तन रिकॉर्ड करें.
  6. अपरिवर्तित लक्ष्य पर लौटें.
  7. मर्ज दिशा की पुष्टि करें.
  8. केवल स्पष्ट रूप से तेजी से आगे बढ़ने की आवश्यकता है।
  9. लेबल को मौजूदा वंशज पर ले जाएँ।
  10. पहचान सत्यापित करें, न कि केवल ग्राफ़ आकार।
  11. एक अलग लक्ष्य सुरक्षित रखें इसे मजबूर करने के बजाय.
  12. क्या आवश्यक है?
  13. वंश, नाम या रंग नहीं, तेजी से आगे बढ़ने का निर्धारण करता है।
  14. कौन सा शुल्क?
  15. लक्ष्य एक की ओर बढ़ता है बिना किसी धक्का के मौजूदा डी।
  16. परिणामी लक्ष्य SHA?
  17. मापा गया लक्ष्य बराबर है पिछली सुविधा युक्ति.
  18. स्वतंत्र लक्ष्य प्रतिबद्धता जोड़ी गई: केवल एफएफ?
  19. विचलन इसका उल्लंघन करता है आवश्यक वंश द्वार.
  20. ओल्ड एम के दो माता-पिता हैं: इस क्रिया के विलय का प्रमाण दें?
  21. एम की मौजूदा वंशावली नहीं है इस कार्रवाई से एक नई प्रतिबद्धता.
  22. पूर्णता क्या सिद्ध करती है?
  23. दोनों रेफरी पहचान और फ़ाइल स्थिति आवश्यक है.
  24. वास्तविक परिणाम सत्यापित करें, सिर्फ एक संदेश नहीं.
  25. कार्य करने से पहले बदले हुए इनपुट का अनुमान लगाएं।
  26. पुनर्प्राप्ति से पहले उपयोगी कार्य सुरक्षित रखें.
  27. जारी रखने से पहले चेकपॉइंट साबित करें।
  28. सत्यापित परिणाम रखें अगले चरण के लिए.