git - delete - how to merge branch a into branch b?




كيفية استبدال الفرع الرئيسي في بوابة ، كليا ، من فرع آخر؟ (4)

ممكن تكرار:
تغيير الفرع الحالي لإتقان في بوابة

لدي فرعين في بلدي git repo:

  1. رئيس
  2. seotweaks (تم إنشاؤه في الأصل من المعلم)

لقد قمت بإنشاء seotweaks بنية دمجها بسرعة في الصفحة master ، ومع ذلك كان ذلك قبل 3 أشهر والرمز في هذا الفرع هو 13 نسخة قبل master ، فقد أصبح بالفعل فرعنا الرئيسي العامل حيث أن جميع التعليمات البرمجية master هي أكثر أو أقل بالية الآن.

ممارسة سيئة للغاية وأنا أعلم ، الدرس المستفادة.

هل تعرف كيف يمكنني استبدال جميع محتويات الفرع master بتلك الموجودة في seotweaks ؟

يمكنني فقط حذف كل شيء في master والدمج ، ولكن هذا لا يبدو أفضل الممارسات.


لقد وجدت أن هذا هو أفضل طريقة للقيام بذلك (كان لدي مشكلة مع خادمي لا تسمح لي بحذفها)

على الخادم الذي يستضيف مستودع تخزين الأصل ، اكتب ما يلي من دليل داخل المستودع:

git config receive.denyDeleteCurrent ignore

على محطة العمل الخاصة بك:

git branch -m master vabandoned                 # rename master on local
git branch -m newBranch master                  # locally rename branch newBranch to master
git push origin :master                         # delete the remote's master
git push origin master:refs/heads/master        # push the new master to the remote
git push origin abandoned:refs/heads/abandoned  # push the old master to the remote

مرة أخرى على الخادم الذي يستضيف مستودع الأصل:

git config receive.denyDeleteCurrent true

الائتمان لمؤلف هذه الصفحة

http://www.mslinn.com/blog/?p=772


ماذا عن استخدام فرع بوابة -m لإعادة تسمية الفرع الرئيسي إلى آخر ، ثم إعادة تسمية seotweaks فرع لإتقان؟ شيء من هذا القبيل:

git branch -m master old-master
git branch -m seotweaks master
git push -f origin master

قد يؤدي هذا إلى إزالة الالتزام في الأصل الرئيسي ، يرجى التحقق من الأصل الرئيسي قبل تشغيل git push -f origin master .


يجب أن تكون قادرًا على استخدام إستراتيجية الدمج "الخاصة بنا" لاستبدال الكتابة الرئيسية بـ seotweaks مثل:

git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks

يجب أن تكون النتيجة سيدك هو الآن أساسا seotweaks.

( -s ours قصيرة --strategy=ours )

من المستندات حول إستراتيجية "نحن":

هذا يحل أي عدد من الرؤوس ، ولكن الشجرة الناتجة من الدمج هي دائماً رأس الفرع الحالي ، متجاهلة جميع التغييرات من جميع الفروع الأخرى. ومن المفترض أن تستخدم لتحل محل تاريخ التنمية القديمة من الفروع الجانبية. لاحظ أن هذا يختلف عن الخيار -Xours إلى استراتيجية دمج العودية.


يمكنك إعادة تسمية / إزالة رئيسية على جهاز التحكم عن بعد ، ولكن ستكون هذه مشكلة إذا كان الكثير من الأشخاص قاموا بعملهم على الفرع الرئيسي البعيد وقاموا بسحب هذا الفرع في الريبو المحلي.
قد لا يكون هذا هو الحال هنا حيث يبدو أن الجميع يعمل على فرع " seotweaks ".

في هذه الحالة ، يمكنك:
git remote - قد لا يعمل. (قم بعمل git remote show لمعرفة كيف يتم الإعلان عن جهاز التحكم عن بعد الخاص بك في الريبو المحلي الخاص بك. سوف أفترض " origin ")
(فيما يتعلق بـ GitHub ، تعليقات house9 : "اضطررت إلى القيام بخطوة واحدة إضافية ، انقر فوق الزر" Admin "على GitHub وقم بتعيين" Default Branch "على شيء آخر غير" master "، ثم أعد وضعه بعد ذلك")

git branch -m master master-old  # rename master on local
git push origin :master          # delete master on remote
git push origin master-old       # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master           # create master on remote

لكن، مرة أخرى:

  • إذا حاول مستخدمون آخرون سحبه أثناء حذف الرئيسي على جهاز التحكم عن بعد ، فسوف تفشل عمليات السحب ("لا يوجد مثل هذا المرجع على جهاز التحكم عن بعد")
  • عندما يتم إعادة إنشاء الرئيسية على جهاز التحكم عن بعد ، سيحاول السحب دمج هذا المفتاح الرئيسي الرئيسي على المستوى المحلي (القديم الآن) الرئيسي: الكثير من التعارضات. انهم في الواقع بحاجة إلى reset --hard سيدهم المحلي إلى فرع بعيد / سيد أنهم سيجلبون ، ونسيان سيدهم الحالي.




git-branch