سؤال
لدي مستودع عام في Github.com مع 2 فروع: master
و test
.
قمت بإنشاء دليل جديد محليا وفعلت:
[ ] git clone git@github.com:{username}/{projectname}.git
ثم قمت بإنشاء فرع جديد يدعى my_test
مع
[ ] git branch my_test
وتحول إليها.
[ ] git checkout my_test
ثم دمجها من بلدي test
فرع مستودع علني مع
[ ] git merge origin/test
وقد أدى إلى الأمام بسرعة.
لقد اتخذت بعض التغييرات وارتكبتها. ثم حاولت دفع المحلية my_test
فرع للجمهور test
فرع في جيثب مع
[ ] git push git@github.com:{username}/{projectname}.git test
لكنني حصلت على هذا الخطأ:
error: src refspec test does not match any.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'git@github.com:{username}/{projectname}.git
ما الخطأ الذي افعله ؟
المحلول
ربما حاول:
git push git@github.com:{username}/{projectname}.git HEAD:test
تنسيق المعلمة الأخيرة في سطر الأوامر هذا هو recspec. وهو مصدر مصدر يليه القولون ثم المرجع الوجهة. يمكنك أيضا استخدام اسم الفرع المحلي الخاص بك (my_test
) بدلا من الرأس لتكون متأكدا من أنك تدفع الفرع الصحيح.
الوثائق ل git push
لديه المزيد من التفاصيل على هذه المعلمة.
نصائح أخرى
أيضا، لا تحتاج إلى كتابة عنوان URL بأكمله في كل مرة تريد الضغط عليها. عند تشغيل الاستنساخ، قام GIT بحفظ عنوان URL بأنه "أصل"، ولهذا السبب يمكنك تشغيل شيء مثل "دمج الأصل / الاختبار" - فهذا يعني فرع "الاختبار" على خادم "الأصل". لذلك، أبسط طريقة للدفع إلى الخادم الخاص بك في هذه الحالة سيكون:
git push origin my_test:test
من شأنها أن تدفع فرع "My_test" المحلي الخاص بك إلى فرع "الاختبار" على خادم "الأصل". إذا قمت بتسمية الفرع المحلي الخاص بك نفس الفرع على الخادم، فإن القولون ليس نايسيا، يمكنك ببساطة القيام:
git push origin test
يأتي هذا الخطأ أيضا إذا حاولت الدفع إلى مستودع جديد دون ارتكاب أي شيء أولا. يحاول:
git add -A
git commit -am 'Initial commit'
ثم حاول دفعك مرة أخرى.
أعتقد هنا ستحتاج إلى إعداد تتبع فرعي. الرجاء إدخال ما يلي لتمكين التعقب
git branch --track my_test origin/my_test
لاختبار
git push -u origin my_test
git pull origin my_test
تحتاج إلى التأكد من أن مستودعك المحلي لديك نفس اسم المستودع عن بعد الذي تحاول دفعه.
أولا، تغيير مستودع باستخدام فرع GIT -M "اختبار" بحيث يكون "My_test" سيكون "اختبار". ثانيا، مجرد اختبار أداء بوابة