سؤال

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

cd <app root>
git checkout 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73 

أخبرني أحدهم أن القيام بالخروج قد خلق شجرة عاملة جديدة وليس الفرع نفسه ، لذلك عندما دفعت التغييرات التراجع إلى هيروكو ، قال إن كل شيء محدث ولم يتم دفع أي شيء. كيف يمكنني إصلاح هذا الموقف؟ شكرا لمساعدتكم مقدما.

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

المحلول

عند الخروج من اسم الالتزام المباشر (باستخدام تجزئة SHA-1 لكائن الالتزام) بدلاً من التحقق من اسم الفرع ، ينتهي بك الأمر بـ "رأس منفصل". Head هو "المرجع" الذي يتتبع ما يتم فحصه حاليًا. يصبح منفصلاً عند الخروج مباشرة من التزام بدلاً من فرع (لا يتم إرفاقه بأي فرع). لا يتم تحديث أي فروع عند فصل رأس مستودع. قد تفكر في حالة الرأس المنفصلة كما لو كان لديك فرع مجهول.


لإعادة تشغيل رأس مستودعك ، ستحتاج إلى حفظ الرأس الحالي كفرع والتحقق من ذلك الفرع:

  1. لحفظ الرأس الحالي في أ الجديد فرع يفعل هذا:

    git branch <new-branch-name>
    
  2. للكتابة فوق موجود فرع تحتاج إلى استخدامه --force:

    git branch --force <existing-branch-name>
    
  3. بعد ذلك ، Rattach رأس مستودعك عن طريق التحقق من الفرع الجديد/المحدث:

    git checkout <branch-name>
    

    (أين <branch-name> بالضبط مثل <new-branch-name> أو <existing-branch-name>, ، اعتمادًا على أي من الأمرين أعلاه اللذين استخدمتهما)

هذا التسلسل (git branch لتوضيح نقطة المرجع لالتزام الرأس الحالي ، إذن git checkout هذا الفرع المحدث) سيستمر في أي محتوى غير ملتزم به قد يكون لديك في فهرس العمل و/أو الشجر.


في المستقبل ، إذا كنت ترغب في "تراجع" الفرع الحالي إلى بعض الالتزام السابق ، فيجب عليك استخدام هذا بدلاً من فصل رأس مستودعك:

git reset --hard <commit>

سيؤدي ذلك إلى إعادة تعيين الفرع الحالي (أو رأسك المنفصل ، إذا تم فصله بالفعل) إلى الالتزام المسماة ، وجعل الفهرس والشجرة العاملة تعكس هذا الالتزام (أي أنه يلقي أي ارتباطات منذ الالتزام المحدد مع أي محتوى غير ملتزم ).

تعتبر حالة الرأس المنفصلة مفيدة لإعادة النظر في الدول القديمة ، وأحيانًا للعمل على المدى القصير الذي لست متأكدًا من أنك ستحتفظ به. بخلاف ذلك ربما تريد تجنب ذلك.

نصائح أخرى

تريد إعادة التعيين:

git reset --hard 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top