2012-10-21 14 views
26

मैंने कभी भी git का उपयोग नहीं किया GitHub ने विंडोज ऐप जारी किया, इसलिए मैंने कभी इसे कमांड लाइन में उपयोग नहीं किया है।एकाधिक प्रतिबद्धताओं से कई शाखाओं को कैसे दबाया जाए?

तो मेरी स्थिति यहां है:
मैंने कुछ master पर काम किया, फिर शाखा स्विच की और कुछ भी वहां काम करता था। गिटहब को धक्का दिए बिना सब कुछ। जब मैंने विंडोज़ ऐप में sync पर क्लिक किया (जो मुझे लगता है कि git push है), तो मेरे आश्चर्य की बात है कि मेरे सभी काम मेरी नई शाखा में धकेल दिए गए थे - यहां तक ​​कि मैंने जो भी काम किया था, जब मैं master में था।

चूंकि यह विंडोज ऐप का व्यवहार है, मुझे लगता है कि मुझे कमांड लाइन का उपयोग करना है।
रिमोट पर सही शाखाओं को करने के लिए सही git push कमांड क्या है?

उत्तर

47

सभी शाखाओं (तहत refs/सिर refs) पुश करने के लिए, निम्न आदेश का उपयोग (जहां मूल अपने रिमोट है):

git push origin --all 

आप भी अपने config पुश करने के लिए में matching को push.default सेट कर सकते हैं डिफ़ॉल्ट रूप से दोनों सिरों पर एक ही नाम वाली सभी शाखाएं होती हैं। उदाहरण के लिए:

git config --global push.default matching 

Git 2.0 के बाद से डिफ़ॉल्ट जो सबसे सुरक्षित विकल्प है simple है।

7

git push origin डिफ़ॉल्ट रूप से रिमोट तक सभी ट्रैकिंग शाखाओं से धक्का देगा।

git push origin my-new-branch आपकी नई शाखा को धक्का देगा।

मुझे विश्वास नहीं है कि गलती से ऐसा करने के लिए कुछ भी आसान या संभव है जो एक ही शाखा तक दो अलग-अलग शाखाओं से काम करता है और रिमोट पर विलय करता है।

मुझे लगता है कि नई शाखा के इतिहास में मास्टर से काम करता है। यह देखने के लिए कि क्या यह सत्य है, स्थानीय स्तर पर git log my-new-branch चलाएं और देखें कि आपके इतिहास में कौन सा काम करता है।

यदि हां, तो जब आप "शाखाओं बंद" आप शायद मास्टर के बंद के बाद branched नई प्रतिबद्ध किए गए थे, इसलिए नई शाखा इतिहास में कोई केवल वे जो शाखा के लिए अद्वितीय प्रतिबद्ध के सभी था।

+1

मुझे आपके आखिरी सुझाव के बारे में निश्चित नहीं है, मैं कहूंगा कि आदेश बस 'गिट पुश मूल शाखा है एक और ब्रंच' – Drealmer

+2

मुझे लगता है कि गिट के नए संस्करण सभी ट्रैकिंग शाखाओं को धक्का नहीं देते हैं: http://stackoverflow.com/ ए/13148313/586086 –

4

देर उत्तर लेकिन मैं अपने समाधान को साझा करने वाला हूं जो मेरे लिए काम करता है।

अंत में मेरी /foo/.git/config फ़ाइल की तरह दिखता है:

[core] 
    ... 

[remote "dev"] 
    url = http://dev.foobar.com/foo.git 
    fetch = +refs/heads/*:refs/remotes/dev/* 
[remote "pro"] 
    url = http://pro.foobar.com/foo.git 
    fetch = +refs/heads/*:refs/remotes/pro/* 

[remote "all"] 
    url = http://dev.foobar.com/foo.git 
    url = http://pro.foobar.com/foo.git 

[http] 
    postBuffer = 524288000 

और आदेश;

git push all --all 

क्रेडिट: Pushing to Multiple Git Repositories Simultaneously

+0

आपके पास '{दूरस्थ" सभी "]' के तहत दो बार 'url' क्यों है? – MiniGod

+0

वह एक टाइपो था, संपादित किया गया था। Tnx! –

13

आप कई विशिष्ट शाखाओं पुश करने के लिए चाहते हैं (उदाहरण Branch1 और Branch2 के लिए) का उपयोग कर सकते हैं:

git push origin branch1 branch2 

Git में> = 2.4 यह कार्रवाई कर सकते हैं परमाणु रूप से किया जाना चाहिए (यानी यदि यह किसी भी शाखा को धक्का देने में विफल रहता है तो कुछ भी धक्का नहीं दिया जाएगा):

git push --atomic origin branch1 branch2 
+0

यह काम नहीं करता है। यह केवल शाखा 1 तक पहुंचता है – Adnan

संबंधित मुद्दे