سؤال

قد تكون هناك أكثر من طريقة لطرح هذا السؤال، لذا إليك وصفًا للمشكلة.كنت أعمل على الماجستير والتزمت ببعض الأشياء ثم قررت أنني أريد تأجيل هذا العمل.لقد قمت بعمل نسخة احتياطية من بعض الالتزامات ثم تفرعت قبل أن أبدأ عملي السيئ.من الناحية العملية، يعمل هذا بشكل جيد، ولدي الآن فرع مختلف باعتباره فرع التطوير الرئيسي الخاص بي.أنا أتساءل كيف يمكنني تغيير الأشياء حتى أعمل على البرنامج الرئيسي مرة أخرى ولكن لا يحتوي على عملي غير المهم وقال إن العمل في فرع مختلف.

بعض الطرق التي يمكن طرحها/حلها:كيف يمكنني إعادة تسمية فرعي الرئيسي إلى شيء آخر ثم إعادة تسمية شيء آخر ليصبح رئيسي؟كيف أقوم بعمل نسخة احتياطية للنسخة الرئيسية ثم أجعل جميع الالتزامات التي قمت بنسخها احتياطيًا في الماضي موجودة في فرع مختلف؟

شكرا لجميع الإجابات (السريعة)!كلهم جيدون.

هل كانت مفيدة؟

المحلول

بالإضافة إلى التعليقات الأخرى، قد تجد التبديل -m (نقل) إلى git-branch مفيدًا.يمكنك إعادة تسمية فرعك الرئيسي القديم إلى اسم آخر، ثم إعادة تسمية فرعك الجديد ليصبح رئيسيًا:

git branch -m master crap_work
git branch -m previous_master master

نصائح أخرى

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

git checkout -b topic/topic_name master

ومن هناك، يمكنني دفع التغييرات إلى المستودعات العامة:

git push pu topic/topic_name

أو في النهاية قم بدمجه مرة أخرى مع فرعي الرئيسي:

git checkout master && git merge topic/topic_name

إذا كنت تريد حقًا العودة إلى نقطة زمنية قديمة وتعيين ذلك الفرع كفرع رئيسي، فيمكنك إعادة تسمية الفرع الحالي إلى شيء آخر ثم التحقق من إصدار أقدم ليكون فرعك الرئيسي:

 git branch -m master junk
 git co -b master old_sha1_value

ابدأ master, ، قم بإنشاء فرع يسمى in-progress, ، ثم قم بإعادة الضبط master لالتزام سابق.

$ git branch in-progress
$ git reset --hard HEAD^

هذا سهل نسبيًا:

git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch

سيؤدي هذا إلى تعيين سيدك إلى أي نقطة في خطوة واحدة:

git checkout -B master new_point
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top