वास्तविक कारण यह है कि, एक नए रेपो (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
यदि आवश्यक हो तो स्वचालित रूप से दूरस्थ रेपो में शाखा का निर्माण करेंगे। यह डिफ़ॉल्ट क्यों नहीं है उत्तर में बताया गया है।