كيف يمكنني إعادة تعيين الفرع الحالي إلى 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 أداة قوية لكنها تتطلب فهماً دقيقاً. يمكن أن تكون هذه العملية مفيدة للغاية عندما تُستخدم بشكل صحيح، خاصة مع المعرفة الدقيقة لأنواع إعادة التعيين المختلفة وكيفية تطبيقها بأمان.
تذكر دائماً أن تتأكد من أنك تفهم تأثير كل نوع من أنواع إعادة التعيين قبل تنفيذه، وحافظ على نسخ احتياطية عند الضرورة لتجنب فقدان العمل غير المحفوظ.