जीआईटी में एक साथ 2 शाखाएँ जोड़ना


131

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

मान लें कि हमारे पास शाखा "ए" में एक कार्यशील परियोजना है।

मैं घर जाता हूं और इस शाखा में बदलाव करता हूं और इसे "बी" के रूप में सहेजता हूं। एक अन्य प्रोग्रामर "ए" में परिवर्तन करता है और इसे "सी" के रूप में बचाता है।

क्या दो शाखाओं "बी" और "सी" को एक साथ मिलाने का एक तरीका है, फिर एक नई शाखा के रूप में परिवर्तन करें, "डी" कहें?

या 'मर्ज' की बात याद आ रही है?


किसी अन्य शाखा में 'परिवर्तनों को बचाने' की आवश्यकता नहीं है। एक एक काम करते हैं और फिर उन अलग एक के साथ मर्ज
Knittl

मैं अनुसरण नहीं करता। मेरे स्थानीय कंप्यूटर पर A होगा, dev1 में उसके कंप्यूटर पर A की एक प्रति होगी, और Dev2 के पास उसके कंप्यूटर पर A की एक प्रति होगी। दोनों देव परिवर्तन करते हैं, मैं इन परिवर्तनों को एक साथ कैसे मिलाऊँ?
दीवाना हो गया

जवाबों:


196

merge दो (या अधिक) शाखाओं को एक साथ लाने के लिए उपयोग किया जाता है।

एक छोटा सा उदाहरण:

# on branch A:
# create new branch B
$ git checkout -b B
# hack hack
$ git commit -am "commit on branch B"

# create new branch C from A
$ git checkout -b C A
# hack hack
$ git commit -am "commit on branch C"

# go back to branch A
$ git checkout A
# hack hack
$ git commit -am "commit on branch A"

इसलिए अब तीन अलग-अलग शाखाएं हैं (अलग-अलग एबी और सी)

B और C से A, चेकआउट A (पहले से इस उदाहरण में किया गया) से परिवर्तन प्राप्त करने के लिए और फिर मर्ज कमांड का उपयोग करें:

# create an octopus merge
$ git merge B C

आपका इतिहास कुछ इस तरह दिखाई देगा:

…-o-o-x-------A
      |\     /|
      | B---/ |
       \     /
        C---/

यदि आप रिपॉजिटरी / कंप्यूटर सीमाओं में विलय करना चाहते हैं, तो git pullकमांड ए पर एक नज़र डालें , जैसे कि शाखा ए के साथ पीसी से (यह उदाहरण दो नए कमिट बनाएगा):

# pull branch B
$ git pull ssh://host/… B
# pull branch C
$ git pull ssh://host/… C

इसका मतलब है कि दोनों शाखाओं ने एक ही कोड कोड को बदल दिया। कनफ़्लिक्ट्स को ठीक करें, git add conflicting_filesऔर फिरgit commit
knittl

ए में फ़ाइल को "हैलो" शब्द में दर्ज करें, ए ने इसे "हेलो" में संशोधित किया और बी ने इसे "हैलो वर्ल्ड" में संशोधित किया। इन फ़ाइलों को मर्ज करने का परिणाम क्या होगा?
डॉट्टी

वूप्स, मेरा मतलब है कि बी ने इसे संशोधित किया और सी ने इसे संशोधित किया।
डॉट

'संशोधन' शब्द से सावधान रहें, जिसका अर्थ है कि git में कुछ अलग (मौजूदा कमिट बदलते हुए)। एक ओर 'हेलो' में एक फाइल 'हैलो' को बदलने और दूसरी तरफ 'हैलो वर्ल्ड' के परिणामस्वरूप मर्ज संघर्ष होगा
knittl

19
@ लेखनी: जबकि अक्सर जादू की तरह लगता है, यह वास्तव में आपके दिमाग को नहीं पढ़ सकता है - यदि दो शाखाएं एक ही सामग्री में दो अलग-अलग बदलाव करती हैं, तो केवल एक व्यक्ति यह पता लगा सकता है कि उन्हें कैसे सामंजस्य करना है। यही एक मर्ज संघर्ष है।
कैसबेल

47

आप में मर्ज परिवर्तन चाहते हैं Subbranch को MainBranch

  1. आपको मेनब्रांच पर होना चाहिए git checkout MainBranch
  2. फिर मर्ज कमांड चलाएँ git merge SubBranch

2
@luckytaxi: सहमत, कभी-कभी कम अधिक होता है
Marcelo Scofano

क्या मैं इसे पूर्ववत कर सकता हूं?
योहनेली

0

मामला: यदि आपको डिफ़ॉल्ट रूप से बनाई गई मर्ज कमिट को अनदेखा करना है , तो इन चरणों का पालन करें।

कहते हैं, एक नई सुविधा शाखा की जाँच की जाती है जिसमें मास्टर पहले से ही 2 आवागमन करता है,

  • "जोड़ा गया", "जोड़ा गया बी"

Checkout a new feature_branch

  • "एडेड सी", "एडेड डी"

सुविधा शाखा फिर दो आवागमन जोड़ता है ->

  • "एड ई", "एड एफ"

यहाँ छवि विवरण दर्ज करें

अब यदि आप feature_branch को मास्‍टर में मर्ज करना चाहते हैं, तो Do the Master git merge feature_branchपर बैठे रहें ।

इससे सभी शाखाएँ मास्टर शाखा (4 मास्टर + 2 में feature_branch = कुल 6) + में एक अतिरिक्त मर्ज करेंगी जैसे कि 'Merge branch 'feature_branch'' आरेखित किया गया है

अगर आपको वास्तव में इन कमिट्स (FB में किए गए) को नजरअंदाज करने की जरूरत है और फीचर_ब्रांच में किए गए पूरे बदलावों को एक सिंगल कमिट की तरह 'Integrated feature branch changes into master'रन, के रूप में जोड़ें git merge feature_merge --no-commit

--नो-कमिट के साथ, यह मर्ज का प्रदर्शन करता है और मर्ज कमेटी बनाने से ठीक पहले रुक जाता है, हमारे पास मास्टर में अब सुविधा शाखा में सभी जोड़े गए बदलाव होंगे और हमें अपने रूप में एक नई प्रतिबद्ध बनाने का मौका मिलेगा।

और अधिक के लिए यहां पढ़ें: https://git-scm.com/docs/git-merge

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