إذا توقفت عملية Git rebase أثناء عملك على جهاز Mac، فتحقق أولاً مما إذا كانت لا تزال قيد التنفيذ باستخدام git status. للاستئناف، قم بحل كل تعارض، وتجهيز الملفات التي قمت بحلها فقط، ثم شغّل git rebase --continue. للعودة إلى حالة الفرع كما كانت قبل الـ rebase، شغّل git rebase --abort. تؤدي هذه الخيارات إلى نتائج مختلفة، لذا تأكد من النتيجة التي تريدها قبل إدخال أي أمر.
1. أعد فتح المستودع وتحقق من حالته
افتح تطبيق Terminal عبر Spotlight أو من مجلد Applications > Utilities في Finder. في Terminal، انتقل إلى الدليل الرئيسي للمستودع، ثم افحص حالته:
cd '/path/to/your/repository'
git status
استبدل المسار النموذجي بالمسار الفعلي لمستودعك. إذا قمت بكتابة مسار يحتوي على مسافات أو رموز خاصة بالـ shell، فضعه بين علامتي اقتباس مفردتين، كما هو موضح. غلاف الأوامر (shell) الافتراضي في Terminal هو zsh، مع أنه قد يحدد المسؤول أو إعداداتك غلافًا آخر. دليل Apple لاستخدام Terminal
إذا أبلغ Git بأن عملية rebase قيد التنفيذ، فاقرأ مخرجات الحالة لمعرفة المسارات التي بها تعارض والخطوة الحالية. إذا لم يبلغ عن وجود rebase نشطة، فلا تقم بتشغيل --continue أو --abort بناءً على التخمين؛ راجع الحالة والسجل الحديث قبل تحديد ما حدث. يوضح الأمر git status التغييرات في شجرة العمل (working-tree) والفهرس (index)، بما في ذلك الملفات غير المتتبعة (untracked files)، لذا اقرأ كامل مخرجاته بدلاً من افتراض أن كل ملف ينتمي إلى عملية الـ rebase. وثائق git status الخاصة بـ Git
2. الاستئناف عن طريق حل التعارضات بعناية
افتح كل ملف متضارب في محرر النصوص الخاص بك. يحدد Git التعارضات النصية بأقسام مثل <<<<<<< و ======= و >>>>>>>. حدد ما يجب أن يكون عليه المحتوى النهائي، وعدّل الملف، ثم احذف علامات التعارض. لا تقبل جانبًا واحدًا بشكل تلقائي ما لم يكن ذلك يطابق الكود أو النص المطلوب. يوضح دليل الـ rebase في Git تسلسل حل التعارض: عدّل الملفات، وجهّز الحلول (stage)، ثم تابع العملية. وثائق git rebase الخاصة بـ Git
عد إلى Terminal وافحص التغييرات المعنية قبل تجهيزها. على سبيل المثال:
git diff
جهّز كل مسار تم حله بالاسم، باستخدام المسار الحقيقي الظاهر في git status:
git add 'path/to/resolved-file'
git status
git rebase --continue
تحمي علامات الاقتباس المسارات التي تحتوي على مسافات أو رموز خاصة؛ وتستطيع حذفها إذا كان المسار لا يتطلب ذلك. يقوم الأمر git add بتجهيز المحتويات الحالية للملف المحدد، لذا افحص الفروقات (diff) أولاً إذا كان يحتوي على تعديلات غير ذات صلة. تحقق من الحالة مرة أخرى للتأكد من تجهيز الحل الصحيح. قد يتوقف Git مجددًا عند تعارض آخر أو يطلب منك تعديل رسالة الإيداع (commit message)؛ اتبع التعليمات المعروضة، ثم كرر خطوات الحل والتجهيز والاستمرار. وثائق git add الخاصة بـ Git
لا تستخدم git rebase --skip إلا عندما تريد عمدًا تجاهل الإيداع (commit) الذي تتم إعادة تطبيقه حاليًا؛ حيث يتجاوز هذا التعديل، وليس وسيلة أخرى لاستئناف نفس الإيداع. إذا لم تكن متأكدًا مما إذا كان التخطي سيؤدي إلى فقدان عمل مطلوب، فلا تستخدمه. خيارات git rebase الخاصة بـ Git
3. الإلغاء عندما تريد التراجع عن الـ rebase
إذا كنت تريد إيقاف العملية والعودة إلى حالة الفرع الأصلية، فشغّل:
git rebase --abort
git status
توضح وثائق Git أن --abort يُعيد تعيين HEAD إلى موضع الفرع الأصلي (أو إلى الفرع المحدد، إذا تم تحديد فرع عند بدء الـ rebase). بعد ذلك، تحقق من الحالة للتأكد من أن النتيجة تطابق ما توقعته. وثائق git rebase الخاصة بـ Git
تجنب الخلط بين --abort و --quit. ينهي أمر git rebase --quit عملية الـ rebase مع ترك HEAD والفهرس وشجرة العمل كما هي في تلك اللحظة. اختر هذا الخيار فقط إذا كنت ترغب تحديدًا في إيقاف الـ rebase مع الاحتفاظ بالحالة الحالية قيد التنفيذ؛ فهو لا يستعيد موضع الفرع قبل الـ rebase. إذا كانت عملية الـ rebase تستخدم --autostash، فسيحتفظ Git بهذه التغييرات المؤقتة (stash) عند الإنهاء. خيارات git rebase الخاصة بـ Git
4. في حال إغلاق Terminal أو عدم وضوح الحالة
لا يعني إغلاق نافذة Terminal في حد ذاته ما إذا كان Git قد أتم الـ rebase أم لا. أعد فتح المستودع وشغّل git status؛ ثم تابع بناءً على الحالة المعروضة. لا تُعد تشغيل أمر git rebase الأصلي بينما تكون هناك عملية rebase حالية نشطة.
إذا أدى انقطاع ما إلى ترك المستودع في حالة لا يتعرف فيها Git على وجود rebase نشطة، فتجنب حذف ملفات حالة .git يدويًا أو استخدام reset --hard كنوع من التخمين. تشير وثائق Git إلى أن التوقف غير المناسب في التوقيت مع استخدام الواجهة الخلفية apply قد يترك الـ rebase في حالة لا يمكن لأمر --abort اللاحق إلغاؤها بشكل نظيف. احرص أولاً على حفظ أي عمل قيّم لم يتم إيداعه، ثم افحص git status و git reflog لفهم حركة الفرع الأخيرة. يسجل reflog التحديثات المحلية الأخيرة على نهايات الفروع؛ ويمكن أن يساعد في التعرف على إيداع سابق، ولكن يجب أن تكون استعادته خطوة مدروسة. ملاحظات قابلية مقاطعة rebase في Git، وثائق git reflog الخاصة بـ Git
بالنسبة للحالة المعتادة للتعارض المنقطع، فإن القرار الآمن بسيط: حل التغييرات المقصودة وتجهيزها قبل تشغيل --continue، أو استخدام --abort عندما تريد التراجع عن عملية الـ rebase والعودة إلى نقطة بدايتها. أعد فحص git status بعد أيٍّ من الإجراءين حتى تعرف الحالة الفعلية لنسخة العمل على جهاز Mac الخاص بك.
المصادر
فتح Terminal أو إنهاؤه على Mac — دعم Apple
Git - وثائق git-status — Git
Git - وثائق git-rebase — Git
Git - وثائق git-add — Git
Git - وثائق git-reflog — Git