سؤال
أستسلم!كلما حاولت الدفع أشعر بالغباء:
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:companyX/projectX.git'
فريقنا لديه إعداد git جديد.بدلاً من إنشاء فروع خاصة، قمت الآن بتشكيل مستودعنا الرئيسي (على جيثب) لإنشاء نسختي الخاصة.
في مرحلة ما ما فعلته هو:
$ git fetch upstream master:upstreammaster
إذن هذا هو الإعداد الحالي الخاص بي::
$ git branch
master
* upstreammaster
$ git remote -v
origin git@github.com:userX/projectX.git
upstream git@github.com:companyX/projectX.git
حيث userX هو مستودعي الخاص.
لذلك أذهب وأجري بعض التغييرات على فرع upstreammaster الخاص بي، والسحب من "upstream master".كل شيء يدمج والاشياء:
$ git pull upstream master
remote: Counting objects: 95, done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 60 (delta 54), reused 0 (delta 0)
Unpacking objects: 100% (60/60), done.
From git@github.com:companyX/projectX
* branch master -> FETCH_HEAD
Merge made by recursive.
stuff | 165 ++++++++++++--------
stuff | 35 ++--
stuff | 107 ++++++++++---
stuff | 105 ++++++++++---
stuff | 24 ++--
stuff | 9 +-
stuff | 53 +++----
stuff | 44 +++---
stuff | 52 +++----
stuff | 32 +----
stuff | 4 +-
stuff | 138 ++++++++---------
stuff | 58 ++++----
stuff | 115 ++++++++------
stuff | 5 +-
stuff | 39 ++---
stuff | 28 ++--
17 files changed, 560 insertions(+), 453 deletions(-)
ولكن بعد ذلك عندما أحاول القيام بما يلي:
$ git push upstream master
To git@github.com:companyX/projectX.git
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:companyX/projectX.git'
أي مساعدة سيكون موضع تقدير كبير!إذا كنت بحاجة إلى توضيح من فضلك اسأل، سأرد!
المحلول
عند القيام دفع، حاول تحديد refspec للسيد المنبع:
git push upstream upstreammaster:master
نصائح أخرى
جاريت هاردي على حق.أو قم أولاً بدمج تغييراتك مرة أخرى في الملف الرئيسي ثم حاول الدفع.بشكل افتراضي، git push
يدفع جميع الفروع التي لها أسماء متطابقة على جهاز التحكم عن بعد - وليس غيرها.إذن هذان هما خياران أمامك - إما تحديده بشكل صريح كما قال جاريت أو الدمج مرة أخرى في فرع مشترك ثم الدفع.
لقد كان هناك حديث عن هذا في قائمة بريد Git ومن الواضح أن هذا السلوك ليس على وشك التغيير في أي وقت قريب - يعتمد العديد من المطورين على هذا السلوك في سير عملهم.
تحرير/توضيح
على افتراض الخاص بك upstreammaster
الفرع جاهز للدفع ثم يمكنك القيام بذلك:
سحب أي تغييرات من المنبع.
$ git سحب سيد المنبع
قم بالتبديل إلى فرعي الرئيسي المحلي
$ بوابة الخروج الرئيسية
دمج التغييرات في من
upstreammaster
$ git دمج upstreammaster
ادفع تغييراتي للأعلى
$ git دفع المنبع
شيء آخر أنت يمكن تريد أن تفعل قبل أن تدفع هو rebase
تغييراتك على المنبع/الرئيسي بحيث تكون التزاماتك كلها معًا.يمكنك إما القيام بذلك كخطوة منفصلة بين رقم 1 ورقم 2 أعلاه (git rebase upstream/master
) أو يمكنك القيام بذلك كجزء من السحب (git pull --rebase upstream master
)
أولا، محاولة سحب من نفس refspec التي تحاول دفع ل.
إذا لم تنجح هذه الطريقة، يمكنك فرض git push
باستخدام git push -f <repo> <refspec>
، ولكن يجب توخي الحذر: يمكن أن يسبب هذا الأسلوب يشير إلى أن تحذف على مستودع البعيد
وأول استخدام
git pull https://github.com/username/repository master
وومحاولة ثم
git push -u origin master
هل المخزون الخاص بك في "المنبع" مستودع عارية؟ حصلت على نفس الخطأ، ولكن عندما أقوم بتغيير لالعارية أنها لم تعد يحدث.
إذا طلب دفعة ويظهر رفض، ثم حاول سحب أول من حساب جيثب الخاص بك ثم حاول دفع.
مثال:
في حالتي كان يعطي خطأ -
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/ashif8984/git-github.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
و**** فما فعلته كان - ****
$ git pull
$ git push
وكان دفعت رمز بنجاح في حساب جيثب بلدي.