التراجع عن الأخطاء بأمان: restore, reset, revert, reflog
أكثر الأخبار طمأنينة في الدورة كلها: Git لا يفقد عملك حقًا إلا نادرًا جدًا. كل خطأ تقريبًا قابل للتراجع، إذا عرفت أي أداة تستخدم. في هذا الدرس سنبني صندوق أدوات استرجاع صغيرًا وواضحًا من أربع أدوات، لكل منها 'متى'. git restore يتخلص من تغيير لم يُحفظ بعد، و git reset يعيد مؤشر الفرع إلى الوراء (انتب
restore هو 'تراجع عمّا أعدّله الآن'. reset هو 'أعِدني إلى الوراء في الزمن' (و --hard يحذف أيضًا، فكن حذرًا). revert هو 'أضِف صفحة تُلغي صفحة قديمة' — آمن للفريق. reflog كاميرا مراقبة تتذكر أين تحرّك HEAD، حتى حين تشعر أنك فقدت عملك.
- git restore
- يتخلّص من تغييرات شجرة العمل (git restore <file>) أو يُخرج ملفًا من الـ staging (git restore --staged <file>). لا يمسّ التاريخ.
- git reset
- يُحرّك HEAD (والفرع) إلى commit أسبق. --soft يُبقي التغييرات في الـ staging، و --hard يتخلّص أيضًا من تغييرات شجرة العمل. آمن على التاريخ المحلي فقط.
- git revert
- يُنشئ commit جديدًا يعكس تغيير commit سابق، دون إعادة كتابة التاريخ. الطريقة الآمنة للتراجع عن شيء دُفع وشُورك بالفعل.
- git reflog
- سجلّ محلي لكل مكان مرّ به HEAD. يتيح لك إيجاد hash الـ commit الذي بدا 'مفقودًا' بعد reset واسترجاعه. شبكة الأمان الخاصة بك.
- التاريخ المشترك (shared history)
- commits دُفعت بالفعل وربما سحبها آخرون. إعادة كتابتها تكسر نسخة الفريق — لذا تستخدم عليها revert، لا reset --hard.