كيف يمكنني إعادة تعيين الفرع الحالي إلى commit سابق؟

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

ما هو الغرض من إعادة تعيين الفرع؟

إعادة تعيين الفرع (Reset) تعني تغيير موضع المؤشر الرئيسي للفرع (HEAD) إلى commit سابق. هناك أسباب كثيرة قد تدفعك للقيام بذلك، منها:

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

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

الأنواع المختلفة لإعادة التعيين في Git

هناك ثلاثة أنواع رئيسية لإعادة التعيين في Git، وهي:

  • Soft Reset: يحتفظ بالتغييرات في منطقة staging ويُبقي الملفات المُعدلة جاهزة للإضافة إلى commit جديد.
  • Mixed Reset: يُبقي التغييرات في ملفات العمل، ولكن يُزيلها من منطقة staging.
  • Hard Reset: يحذف التغييرات تماماً من ملفات العمل ومن منطقة staging، مما يعيد الحالة إلى commit المستهدف تماماً.

اختيار النوع المناسب يعتمد على هدفك الأساسي ومدى أهمية البيانات التي تريد الاحتفاظ بها.

كيفية تنفيذ إعادة التعيين

لإعادة تعيين الفرع الحالي إلى commit سابق، ستحتاج إلى معرفة hash الخاص بالـcommit المستهدف. يمكن العثور على هذا hash باستخدام الأمر التالي:

git log --oneline

سيعرض الأمر أعلاه قائمة مختصرة بجميع الـcommits، بما في ذلك hash الخاص بكل منها. بعد تحديد hash، يمكنك استخدام الأوامر التالية:

1. استخدام Soft Reset

إذا كنت تريد الاحتفاظ بجميع التغييرات في منطقة staging، يمكنك استخدام:

git reset --soft 

على سبيل المثال:

git reset --soft a1b2c3d

هذا الأمر يُعيد المؤشر إلى commit المستهدف بينما يحتفظ بجميع التغييرات في حالة استعداد للإضافة إلى commit جديد.

2. استخدام Mixed Reset

لإبقاء التغييرات في ملفات العمل فقط وإزالتها من منطقة staging، استخدم:

git reset --mixed 

على سبيل المثال:

git reset --mixed a1b2c3d

يعتبر هذا الإجراء الخيار الافتراضي لـgit reset إذا لم تحدد نوعاً معيناً.

3. استخدام Hard Reset

إذا كنت تريد التخلص تماماً من جميع التغييرات وجعل حالة الفرع متطابقة مع commit المستهدف، استخدم:

git reset --hard 

على سبيل المثال:

git reset --hard a1b2c3d

تحذير: هذا الخيار سيؤدي إلى فقدان التغييرات غير المحفوظة بشكل دائم، لذا استخدمه بحذر.

ما الفرق بين Reset و Revert؟

أحياناً يُخلط بين reset وrevert. بينما يؤدي reset إلى تغيير موضع المؤشر HEAD إلى commit معين وإعادة كتابة التاريخ، يقوم revert بإنشاء commit جديد يُلغي التغييرات التي تمت في commit محدد دون حذف أي بيانات.

استخدم revert إذا كنت تعمل في فريق وترغب في الحفاظ على تاريخ المشروع بالكامل، بينما يُفضل reset إذا كنت تعمل على فرع خاص أو بحاجة لإصلاح سريع.

كيفية تجنب فقدان البيانات

لمنع فقدان البيانات أثناء إعادة التعيين، اتبع النصائح التالية:

  • استخدم git stash لحفظ التغييرات غير المُدرجة قبل القيام بإعادة التعيين.
  • قم بإنشاء فرع جديد باستخدام git branch إذا كنت تريد الاحتفاظ بالوضع الحالي قبل التراجع.
  • راجع التغييرات باستخدام git status قبل تنفيذ الأوامر الحساسة.

الخلاصة

إعادة تعيين الفرع الحالي إلى commit سابق في Git أداة قوية لكنها تتطلب فهماً دقيقاً. يمكن أن تكون هذه العملية مفيدة للغاية عندما تُستخدم بشكل صحيح، خاصة مع المعرفة الدقيقة لأنواع إعادة التعيين المختلفة وكيفية تطبيقها بأمان.

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