إلغاء الأخطاء: الأوامر restore، reset، revert — الاستخدام الصحيح والخطير
واحدة من أكثر المواضيع طلبًا في المقابلات والعمل الفعلي هي كيفية إلغاء ما تم فعله بالفعل. سنشرح ثلاث أدوات بمستويات مختلفة من الإلغاء ونركز على الأهم: سنعرض سيناريوهات محددة حيث يؤدي reset --hard إلى تدمير العمل الجماعي، بينما revert هو البديل الآمن. حلول جيدة وأخرى سيئة - مع عواقب حقيقية.
- ستكون قادرًا على إلغاء التغييرات بثقة في أي مرحلة: في دليل العمل، في منطقة الإعداد (index)، وفي تاريخ الالتزامات (commits).
- ستفهم الفرق الجوهري بين reset و revert وستعرف في أي المواقف يكون كل منهما مناسبًا.
- ستتعلم تجنب الأخطاء الشائعة التي يرتكبها المبتدئون عند إلغاء التغييرات في المستودع الجماعي.
จุดเริ่มต้นของบทเรียน
Git restore: زر التراجع للملفات
- Git restore — للتراجع عن التغييرات غير المُسجَّلة في commit
- يعمل مثل زر التراجع في محرر الأكواد
- آمن — لا يغيّر سجل commits
- يرجع الملفات إلى آخر حالة مسجلة في commit
تخيل أنك حفظت ملفًا بالخطأ وفيه تعديل غير مرغوب، وتريد إرجاعه كما كان. Git restore يعمل مثل زر التراجع في محرر الأكواد؛ يرجع الملفات إلى آخر حالة مسجلة في commit. وعلى عكس أوامر التراجع الأخرى، restore تتعامل فقط مع التغييرات غير المُسجَّلة في commit، ولا تمس سجل المشروع. هذه أول أداة تلجأ إليها عند حدوث تعديل عشوائي وتريد إصلاح الموقف بسرعة دون مخاطرة بتاريخ التغييرات.
التراجع عن التغييرات في مجلد العمل
- git restore file.txt — يرجع الملف إلى آخر commit
- يلغي جميع التغييرات في مجلد العمل
- آمن لسجل المشروع — لا يغيّر commits، لكنه لا يحتفظ بنسخة من التغييرات المُلغاة
- تحقق من الحالة باستخدام git status قبل الاستعادة
لنفترض أنك قضيت نصف ساعة تعدّل ملف إعدادات، ثم لاحظت أنك تسير في اتجاه خاطئ. بدل أن تلغي كل تغيير يدويًا، نفّذ git restore config.yml. سيرجع الملف فورًا إلى حالة آخر commit. الأمر يشبه أن تغلق الملف من غير حفظ، لكن مع ضمان أنك ترجع إلى نسخة تعمل. فقط تذكر: إذا كنت تحتاج هذه التعديلات لاحقًا، خذ نسخة منها قبل الاستعادة.
# عرض عملي لاستعادة ملف
$ echo "تعديلات خاطئة" > main.py
$ git status
$ git restore main.py
$ cat main.py
$ git status
إزالة ملف من منطقة الترحيل
- git restore --staged file.txt — إزالة ملف من منطقة الترحيل
- يحافظ على التغييرات في مجلد العمل
- انتبه: من دون --staged ستُفقد التغييرات
- افحص دائمًا git status قبل التنفيذ
من الأخطاء الشائعة أن تضيف بالخطأ ملفًا غير مرغوب فيه إلى منطقة الترحيل. مثلًا، نفّذت git add . فأضفت ملف إعدادات مؤقتًا. أمر git restore مع الخيار --staged واسم الملف settings.tmp سيزيله من منطقة الترحيل بأمان، مع الإبقاء على كل تغييراته في مجلد العمل. من دون الخيار --staged ستفقد تعديلاتك، لذلك افحص الحالة دائمًا باستخدام git status قبل تشغيل restore. الآن أصبحت تعرف كيف تلغي التغييرات قبل الإيداع. لكن ماذا لو دخل الخطأ بالفعل في سجل الإيداعات؟ هنا يأتي دور git reset.
# أضفنا ملفًا إلى منطقة الترحيل بالخطأ
$ git add config.tmp
$ git status
# نزيله من منطقة الترحيل مع الإبقاء على التغييرات
$ git restore --staged config.tmp
$ git status
# نتحقق من بقاء الملف في مجلد العمل
$ ls -la config.tmp
บทเรียนฉบับเต็มใช้ได้เมื่อสมัครสมาชิก
ฉบับเต็มมีสไลด์เพิ่มอีก 24 สไลด์
วิดีโอ สไลด์ทั้งหมด โน้ต แบบทดสอบ AI ติวเตอร์ และการสัมภาษณ์จะเปิดหลังเข้าสู่ระบบและสมัครสมาชิก
เข้าสู่ระบบหรือลงทะเบียน สมัครสมาชิกเนื้อหาบทเรียน
- Git restore: زر التراجع للملفات
- التراجع عن التغييرات في مجلد العمل
- إزالة ملف من منطقة الترحيل
- Git reset: كيف تعمل إعادة لفّ سجل الإيداعات
- reset --soft الآمن: التغييرات تبقى في منطقة الترحيل
- reset --mixed القياسي: تغييرات في مجلد العمل
- reset --hard الخطير: حذف بلا رجعة
- reset: ثلاثة أوضاع، أمر واحد
- git reset --soft: نعيد كتابة سجل التغييرات بأمان
- متى نستخدم --mixed و --hard؟
- قائمة تحقق: أي reset تختار؟
- لماذا لا نكتفي بمحو الخطأ؟
- كيف يعمل git revert عمليًا
- إلغاء عدة تسليمات دفعة واحدة
- Reset: نعيد كتابة السجل محليًا
- Revert: نلغي التغييرات بأمان
- ماذا يحدث عند push: reset مقابل revert
- لماذا يُعد reset --hard خطيرًا
- مثال على فقدان التغييرات
- كيف نستعيد البيانات
- مخاطر التراجع في فرع مشترك
- تراجع آمن عبر revert
- التسلسل الصحيح للإجراءات
- متى تستخدم: restore أو reset أو revert
- قواعد التعامل مع السجل الشخصي والمشترك
- خطوات عملية عند حدوث خطأ
- الخلاصة والنشاط: سيّد التراجع
บทความเกี่ยวกับบทเรียนนี้
- คำสั่ง Git: ชีตสรุปพร้อมตัวอย่างสำหรับใช้ทุกวัน
- git checkout, switch และ restore: ควรใช้อะไรเมื่อไร
- git reset กับ git revert: วิธียกเลิกคอมมิตโดยไม่ทำลายประวัติของทีม
- git reflog: วิธีกู้คอมมิตและบรานช์ที่หายไป
- Git และ GitHub: ต่างกันอย่างไร และเชื่อมโยงกันอย่างไร
บทเรียนทั้งหมดในคอร์สนี้
- مقدمة: Git من الصفر إلى مُطوّر محترف
- لماذا نحتاج إلى Git على الإطلاق — ولماذا لا يُقدّم عليك العمل دونه
- تثبيت وإعداد Git لأول استخدام
- المستودع الأول: init وadd وcommit وسحر الفهرس
- قراءة سجل المشروع: أوامر log و diff و show والتنقل في السجل
- الفروع: الواقع الموازي لرمزك البرمجي
- إلغاء الأخطاء: الأوامر restore، reset، revert — الاستخدام الصحيح والخطير
- GitHub والمستودعات البعيدة: كودك في السحابة
- العمل الجماعي: النسخ المتفرعة، الفروع المميزة وطلبات السحب
- نزاعات الدمج: لا داعي للذعر — افهمها وحُلّها
- سير عمل Git في الفرق الحقيقية: أي سير عمل تختار
- الأدوات المتقدمة: rebase، stash، cherry-pick والعلامات (tags)
- المشروع النهائي: محاكاة التطوير الجماعي الفعلي