वास्तविक कारण यह है कि, एक नए रेपो (git init) में, कोई शाखा नहीं है (नहीं master, कोई शाखा बिल्कुल नहीं, शून्य)
इसलिए जब आप पहली बार किसी खाली अपस्ट्रीम रेपो (आमतौर पर नंगे वाले ) पर जोर दे रहे होते हैं , तो उस अपस्ट्रीम रेपो में उसी नाम की कोई शाखा नहीं होती है।
तथा:
दोनों मामलों में, चूंकि अपस्ट्रीम खाली रेपो की कोई शाखा नहीं है:
- अभी तक मिलान नाम की कोई शाखा नहीं है
- कोई भी अपस्ट्रीम ब्रांच नहीं है (एक ही नाम के साथ या उसके बिना! ट्रैकिंग या नहीं)
इसका मतलब है कि आपके स्थानीय पहले धक्का का कोई पता नहीं है:
- कहाँ धक्का देना है
- क्या धक्का है (क्योंकि यह किसी भी अपस्ट्रीम शाखा को रिमोट ट्रैकिंग शाखा के रूप में दर्ज नहीं किया जा सकता है, और / या एक ही नाम है)
तो आपको कम से कम करने की आवश्यकता है:
git push origin master
लेकिन अगर आप केवल वही करते हैं, तो आप:
masterअपस्ट्रीम (अब गैर-खाली रेपो) पर एक अपस्ट्रीम शाखा बनाएगा : अच्छा।
- यह रिकॉर्ड नहीं करेगा कि स्थानीय शाखा '
master' को अपस्ट्रीम ( origin) ' master' (अपस्ट्रीम शाखा) पर धकेलने की जरूरत है : खराब।
यही कारण है कि यह सिफारिश की जाती है, पहले धक्का के लिए:
git push -u origin master
यह origin/masterएक दूरस्थ ट्रैकिंग शाखा के रूप में रिकॉर्ड करेगा , और अगले पुश को स्वचालित रूप से पुश masterकरने में सक्षम करेगा origin/master।
git checkout master
git push
और वह भी पुश नीतियों ' current' या ' upstream' के साथ काम करेगा ।
प्रत्येक मामले में, प्रारंभिक के बाद git push -u origin master, एक साधारण गिट धक्का मास्टर को सही अपस्ट्रीम शाखा में पुश करने के लिए जारी रखने के लिए पर्याप्त होगा।
push.default, देखेंman git-config)। यदि आप करते हैंgit config --add push.default current, तोgit pushयदि आवश्यक हो तो स्वचालित रूप से दूरस्थ रेपो में शाखा का निर्माण करेंगे। यह डिफ़ॉल्ट क्यों नहीं है उत्तर में बताया गया है।