पुश दूसरी शाखा में जाता है


384

क्या एक शाखा से दूसरी शाखा में परिवर्तन करना और धक्का देना संभव है।

मान लीजिए मैंने BRANCH1 में परिवर्तन शुरू किए और उन्हें BRANCH2 में धकेलना चाहता हूं

से Branch1 , यह करने के लिए मान्य है:

git push origin **BRANCH2**

और फिर BRANCH1 रीसेट करें?

जवाबों:


710

वह लगभग काम करेगा।

गैर-डिफ़ॉल्ट शाखा पर धकेलने पर, आपको स्रोत रेफ और लक्ष्य रेफ को निर्दिष्ट करने की आवश्यकता होती है:

git push origin branch1:branch2

या

git push <remote> <branch with new changes>:<branch you are pushing to> 

26
दोनों है branch1और branch2रिमोट पर होने की जरूरत? क्या होगा यदि आप स्थानीय branch1से रिमोट पर पुश करना चाहते हैं origin branch2?
orad

11
@ोराद: नहीं। पहला हिस्सा वास्तव में एक स्थानीय प्रतिबद्ध के लिए एक पहचानकर्ता है; यह भी एक शाखा होने की जरूरत नहीं है।
SLAKs

6
@abhisekp: उसी सिंटैक्स का उपयोग करें। स्रोत शाखा को संदर्भित करने के लिए, उपयोग करें<remote>/<branch>
SLaks

4
@abhisekp: जैसा मैंने अभी कहा वैसा ही करो। वर्तमान शाखा पूरी तरह से अप्रासंगिक है।
SLaks

20
किसी को भी (अपने आप को) प्रलोभन git push origin :branch2देते हुए यह सोचकर सचेत रहें कि यह वर्तमान स्थानीय शाखा को रिमोट पर धकेल branch2देगा, कि यह रिमोट को हटा देगा branch2! सही तरीका है git push origin HEAD:branch2
हेलर परेरा

72

निश्चित रूप से, हालांकि यह केवल तभी काम करेगा जब यह BRANCH2 का तेजी से आगे होगा या यदि आप इसे मजबूर करते हैं। ऐसा काम करने का सही सिंटैक्स है

git push <remote> <source branch>:<dest branch> 

यह कैसे काम करता है पर अधिक विस्तार के लिए git पुश मैन पेज पर एक "refspec" का विवरण देखें । यह भी ध्यान दें कि एक बल धक्का और एक रीसेट दोनों ऑपरेशन हैं जो "इतिहास को फिर से लिखते हैं", और दिल के बेहोश होने का प्रयास नहीं किया जाना चाहिए जब तक कि आप पूरी तरह से सुनिश्चित न हों कि आप जानते हैं कि आप किसी दूरस्थ रिपॉजिटरी और अन्य के संबंध में क्या कर रहे हैं ऐसे लोग जिनके पास एक ही परियोजना के कांटे / क्लोन हैं।


6
धन्यवाद! मैं सिर्फ इतना जोड़ूंगा कि आप मजबूर कर सकते हैं git push --force remote local-branch:remote-branch
फेरन मायलिनच

16

यह बहुत सरल है। मान लीजिए कि आपने अपनी शाखा ए में परिवर्तन किया है जो स्थानीय और दूरस्थ दोनों स्थानों पर रहता है लेकिन आप इन परिवर्तनों को शाखा बी में धकेलना चाहते हैं जो कहीं भी मौजूद नहीं हैं।

चरण -01: नई शाखा बी में बनाएं और स्विच करें

git चेकआउट -b B

चरण -2: नई स्थानीय शाखा में परिवर्तन जोड़ें

जोड़ देना। // या विशिष्ट फ़ाइल

चरण -03: परिवर्तनों के लिए प्रतिबद्ध करें

git कमिट-एम "कमिटमेज"

चरण -04: नई शाखा B में परिवर्तन बदलता है । नीचे दी गई कमांड एक नई शाखा बी बनाएगी और साथ ही दूरस्थ रूप से

git पुश ओरिजिनल B

अब, आप बिटबकेट से यह सत्यापित कर सकते हैं कि शाखा B की शाखा A की तुलना में एक और कमिट होगा । और जब आप शाखा A की जांच करेंगे तो ये परिवर्तन नहीं होंगे क्योंकि इन्हें शाखा B में धकेल दिया गया है ।

नोट: यदि आपने शाखा A में अपने परिवर्तन शुरू कर दिए हैं और उसके बाद आप उन परिवर्तनों को नई शाखा B में स्थानांतरित करना चाहते हैं तो आपको पहले उन परिवर्तनों को रीसेट करना होगा। #HappyLearning


2

मेरे मामले में मेरे पास एक स्थानीय प्रतिबद्धता थी, जिसे धक्का नहीं दिया गया था origin\master, लेकिन मेरी स्थानीय masterशाखा के लिए प्रतिबद्ध था । इस स्थानीय प्रतिबद्ध को अब दूसरी शाखा में धकेल दिया जाना चाहिए।

गेट एक्सटेंशन के साथ आप कुछ इस तरह कर सकते हैं:

  • (यदि मौजूद नहीं है तो बनाएं) और नई शाखा चेकआउट करें, जहां आप अपनी प्रतिबद्धता को आगे बढ़ाना चाहते हैं।
  • इतिहास की उस कमेटी का चयन करें, जिसे इस ब्रांच में जाना चाहिए।
  • राइट क्लिक करें और चेरी पिक कमेट चुनें
  • प्रेस चेरी लेने बाद में बटन।
  • चयनित प्रतिबद्ध अपने चेक आउट शाखा के लिए लागू हो। अब इसे कमिट करें और आगे बढ़ाएं।
  • दोषपूर्ण प्रतिबद्ध के साथ, अपनी पुरानी शाखा देखें।
  • हार्ड ने इस शाखा को दूसरी अंतिम प्रतिबद्ध पर रीसेट कर दिया, जहां सब कुछ ठीक था (जागरूक रहें कि आप यहां क्या कर रहे हैं!)। आप दूसरी अंतिम प्रतिबद्ध पर राइट क्लिक के माध्यम से कर सकते हैं और यहाँ पर वर्तमान शाखा का चयन कर सकते हैं । ओपरेशन की पुष्टि करें, यदि आप जानते हैं कि आप क्या कर रहे हैं।

आप GIT कमांड लाइन पर भी ऐसा कर सकते हैं । उदाहरण डेविड क्रिस्टेनसेन से कॉपी किया गया :

मुझे लगता है कि तुम पाओगे git cherry-pick+git reset बहुत तेज़ वर्कफ़्लो :

अपने समान परिदृश्य का उपयोग करते हुए, "सुविधा" के साथ शाखा सबसे अधिक गलत होने के साथ, यह करना बहुत आसान होगा:

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

थोड़ा बहुत काम बचता है, और यही परिदृश्य है git cherry-pick संभालने के लिए डिज़ाइन किया गया था।

मैं यह भी ध्यान रखूँगा कि अगर यह सबसे ऊपर की प्रतिबद्धता नहीं है तो यह भी काम करेगा; आपको केवल चेरी-पिक के तर्क के लिए एक कमिट की जरूरत है:

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history


2

मुझे git push origin branch1:branch2आदेश के साथ एक बुरा परिणाम मिला :

मेरे मामले में, branch2हटा दिया गया है और branch1कुछ नए परिवर्तनों के साथ अपडेट किया गया है।

इसलिए, अगर आप चाहते हैं केवल परिवर्तन पर धक्का branch2से branch1, नीचे प्रक्रियाओं का प्रयास करें:

  • पर branch1:git add .
  • पर branch1:git commit -m 'comments'
  • पर branch1:git push origin branch1

  • पर branch2:git pull origin branch1

  • ऑन branch1: पिछली कमिट पर वापस।


0

आप इसे आसानी से कर सकते हैं

git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)

-1

git init 
#git remote remove origin
git remote add origin  <http://...git>
echo "This is for demo" >> README.md 
git add README.md
git commit -m "Initail Commit" 
git checkout -b branch1 
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete  branch1
#git branch --unset-upstream  


1
कृपया कोड का कुछ स्पष्टीकरण जोड़ें।
नक्स

-4

आपने BRANCH1 के लिए प्रतिबद्ध किया है और परिवर्तनों को खोए बिना इस प्रतिबद्ध से छुटकारा पाना चाहते हैं? git रीसेट वह है जो आपको चाहिए। करना:

git branch BRANCH2

यदि आप चाहते हैं कि BRANCH2 एक नई शाखा हो। आप चाहें तो इसे दूसरी ब्रांच के साथ अंत में मर्ज भी कर सकते हैं। यदि BRANCH2 पहले से मौजूद है, तो इस चरण को छोड़ दें।

फिर करो:

git reset --hard HEAD~3

यदि आप अपने द्वारा की गई शाखा पर कमिट को रीसेट करना चाहते हैं। यह अंतिम तीन परिवर्तनों के परिवर्तन लेता है।

फिर BRANCH2 पर रीसेट किए गए कमिट लाने के लिए निम्न कार्य करें

git checkout BRANCH2

यह स्रोत मददगार था: https://git-scm.com/docs/git-reset#git-reset-Uooacommitmakingitatopicbranch

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