Git: स्थानीय रूप से एक दूरस्थ शाखा मर्ज करें


204

मैं के माध्यम से सभी दूरस्थ शाखाओं खींच लिया है git fetch --all। मैं उस शाखा को देख सकता हूं, जिसे मैं git branch -aरीमोट / ओरिजिनल / ब्रांचनेम के माध्यम से मर्ज करना चाहता हूं। समस्या इसकी सुलभ नहीं है। मैं मर्ज या चेकआउट नहीं कर सकता?

जवाबों:


321

आप उन दूरस्थ ट्रैकिंग शाखाओं को संदर्भित कर सकते हैं ~ ( git branch -rउनके साथ सूचीबद्ध ) उनके रिमोट के नाम के साथ।

आपको दूरस्थ शाखा लाने की आवश्यकता है:

git fetch origin aRemoteBranch

यदि आप अपनी स्थानीय शाखा में उन दूरस्थ शाखाओं में से एक का विलय करना चाहते हैं:

git checkout master
git merge origin/aRemoteBranch

नोट 1: लंबे इतिहास के साथ एक बड़े रेपो के लिए, --depth=1आप उपयोग करने पर विकल्प जोड़ना चाहेंगे git fetch

नोट 2: ये कमांड अन्य रिमोट रिपोज के साथ भी काम करते हैं ताकि आप originऔर upstreamयदि आप कांटे पर काम कर रहे हैं तो सेटअप कर सकें ।


विपरीत परिदृश्य: यदि आप अपनी किसी स्थानीय शाखा को किसी दूरस्थ शाखा में विलय करना चाहते हैं (जैसा कि किसी स्थानीय शाखा को दूरस्थ शाखा के विपरीत, जैसा कि ऊपर दिखाया गया है), तो आपको पहले दूरस्थ शाखा के शीर्ष पर एक नई स्थानीय शाखा बनाने की आवश्यकता है :

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

यहाँ विचार, "अपनी स्थानीय शाखा में anotherLocalBranchसे एक " (यहाँ ) को दूरस्थ शाखा ( origin/aBranch) में विलय करना है ।
उसके लिए, आप myBranchउस दूरस्थ शाखा का प्रतिनिधित्व करते हुए पहले " " बनाते हैं : वह git checkout -b myBranch origin/aBranchभाग है।
और फिर आप anotherLocalBranchइसमें (से myBranch) विलय कर सकते हैं ।


aLocalBranch? क्या वह टाइपो है? मुझे लगता है कि आपको फिर से "myBranch" लिखने का मतलब है?
knocte

1
@knocte नहीं: "यदि आप अपनी किसी स्थानीय शाखा को उन दूरस्थ शाखा में से किसी एक पर मर्ज करना चाहते हैं": मैं " aLocalBranch" को " myBranch" मर्ज कर रहा हूं , तो " myBranch" एक दूरस्थ शाखा का प्रतिनिधित्व करता है origin/aBranch
वॉनसी

आपको परेशान करने के लिए क्षमा करें @VonC, अपनी पिछली टिप्पणी में आप कहते हैं कि aLocalBranchटाइपो नहीं है, लेकिन आपने नवीनतम संपादन (2 साल बाद!) को मंजूरी दे दी है, जो इस "संभावित टाइपो" को सही करता है। संपादन संपादित करने से पहले मैं आपके साथ जांच करना चाहता था।
रथ

1
@ सही आप सही हैं: ऐसा प्रतीत होता है कि मैंने समीक्षा की है कि थोड़ा जल्दबाजी में संपादित करें, लापरवाही की सीमा है। मैंने दूसरे मर्ज मामले को स्पष्ट करने के लिए उत्तर को संपादित किया: क्या आप मुझे बता सकते हैं कि क्या यह अभी स्पष्ट है?
VonC

91

जब भी मैं एक मर्ज करता हूं, मैं उस शाखा में पहुंच जाता हूं जिसे मैं मर्ज करना चाहता हूं (उदाहरण के लिए " git checkout branch-i-am-working-in") और फिर निम्नलिखित कार्य करें:

git merge origin/branch-i-want-to-merge-from


2
मुझे लगता है कि आपको git fetch origin/branch-i-want-to-merge-fromपहले, सही करना है?
हेनरिक

9
git fetch origin developइसके बादgit merge origin/develop
ओलिवियर

2
@Olivier आप सही हैं, यह करने का सही तरीका है। git merge अकेला ऐसा नहीं करेगा।
सैम

1
चतुर नामकरण सम्मेलन के लिए धन्यवाद जिसने मुझे समझने में मदद की
tony2tones

1
@ अकीरा नहीं है git add .-> git commit -m <message>-> git push -u origin <branch>?
बादल चो

24

पहले मूल से दूरस्थ शाखा लाएँ।

git fetch origin remote_branch_name

दूरस्थ शाखा को स्थानीय शाखा में मर्ज करें

git merge origin/remote_branch_name

1
यह मेरे लिए तब काम आया जब स्वीकृत उत्तर ने बताया कि कुछ ऐसा नहीं है जिसे हम मर्ज कर सकते हैं। मेरे मामले में मैं GitHub पर अपने रेपो के दूसरे उपयोगकर्ता के कांटे से विलय कर रहा था।
SJT

क्या पहले कमांड लाने की आवश्यकता है? क्या 'git मर्ज की उत्पत्ति / Remote_branch_name' दूरस्थ शाखा से पढ़ता है, स्थानीय नहीं। तो मुझे परवाह नहीं करनी चाहिए, क्या स्थानीय शाखा अद्यतन है या नहीं?
माइकल फ्रीजिम

@MichaelFreidgeim आपको सबसे पहले लाने की ज़रूरत है ताकि आपका स्थानीय भंडार रिमोट की स्थिति को जान सके। गिट पुल मूल रूप से एक भ्रूण है और आपकी वर्तमान शाखा के वर्तमान दूरस्थ संस्करण से विलय होता है, लेकिन अब आप एक अलग से प्राप्त करते हैं और विलय करते हैं। stackoverflow.com/questions/292357/…
DZet

20

शायद आप स्थानीय शाखा के साथ दूरस्थ शाखा को ट्रैक करना चाहते हैं :

  1. एक नई स्थानीय शाखा बनाएँ: git branch new-local-branch
  2. दूरस्थ शाखा को ट्रैक करने के लिए इस नई बनाई गई शाखा को सेट करें: git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. इस शाखा में प्रवेश करें: git checkout new-local-branch
  4. दूरस्थ शाखा की सभी सामग्रियों को स्थानीय शाखा में खींचें: git pull

3

यदि आप पहले से ही अपनी दूरस्थ शाखा प्राप्त करते हैं और करते हैं git branch -a,
तो आप कुछ प्राप्त करते हैं:

* 8.0
  xxx
  remotes/origin/xxx
  remotes/origin/8.0
  remotes/origin/HEAD -> origin/8.0
  remotes/rep_mirror/8.0

उसके बाद, आप rep_mirror/8.0स्थानीय रूप से अपनी दूरस्थ शाखा को नामित करने के लिए उपयोग कर सकते हैं ।

चाल है कि remotes/rep_mirror/8.0काम नहीं करता है, लेकिन rep_mirror/8.0करता है।

तो, जैसे एक कमांड git merge -m "my msg" rep_mirror/8.0मर्ज करते हैं।

(नोट: यह @VonC उत्तर के लिए एक टिप्पणी है। मैंने इसे एक अन्य उत्तर के रूप में रखा क्योंकि कोड ब्लॉक टिप्पणी प्रारूप में फिट नहीं हैं)

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