إلغاء الأخطاء: الأوامر restore، reset، revert — الاستخدام الصحيح والخطير
واحدة من أكثر المواضيع طلبًا في المقابلات والعمل الفعلي هي كيفية إلغاء ما تم فعله بالفعل. سنشرح ثلاث أدوات بمستويات مختلفة من الإلغاء ونركز على الأهم: سنعرض سيناريوهات محددة حيث يؤدي reset --hard إلى تدمير العمل الجماعي، بينما revert هو البديل الآمن. حلول جيدة وأخرى سيئة - مع عواقب حقيقية.
- ستكون قادرًا على إلغاء التغييرات بثقة في أي مرحلة: في دليل العمل، في منطقة الإعداد (index)، وفي تاريخ الالتزامات (commits).
- ستفهم الفرق الجوهري بين reset و revert وستعرف في أي المواقف يكون كل منهما مناسبًا.
- ستتعلم تجنب الأخطاء الشائعة التي يرتكبها المبتدئون عند إلغاء التغييرات في المستودع الجماعي.
Phần đầu bài giảng
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
Bài giảng đầy đủ dành cho thuê bao
Còn 24 slide nữa trong phiên bản đầy đủ.
Video, toàn bộ slide, ghi chú, bài kiểm tra, gia sư AI và phỏng vấn sẽ mở sau khi đăng nhập và đăng ký thuê bao.
Đăng nhập hoặc đăng ký Đăng ký thuê baoNội dung bài giảng
- 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
- قواعد التعامل مع السجل الشخصي والمشترك
- خطوات عملية عند حدوث خطأ
- الخلاصة والنشاط: سيّد التراجع
Bài viết liên quan đến bài học này
- Lệnh Git: bảng tra cứu với ví dụ dùng hằng ngày
- git checkout, switch và restore: khi nào dùng cái nào
- git reset và git revert: cách hoàn tác commit mà không phá lịch sử nhóm
- git reflog: cách khôi phục commit và nhánh đã mất
- Git và GitHub: khác nhau thế nào và liên hệ ra sao
Tất cả bài giảng của khóa học
- مقدمة: Git من الصفر إلى مُطوّر محترف
- لماذا نحتاج إلى Git على الإطلاق — ولماذا لا يُقدّم عليك العمل دونه
- تثبيت وإعداد Git لأول استخدام
- المستودع الأول: init وadd وcommit وسحر الفهرس
- قراءة سجل المشروع: أوامر log و diff و show والتنقل في السجل
- الفروع: الواقع الموازي لرمزك البرمجي
- إلغاء الأخطاء: الأوامر restore، reset، revert — الاستخدام الصحيح والخطير
- GitHub والمستودعات البعيدة: كودك في السحابة
- العمل الجماعي: النسخ المتفرعة، الفروع المميزة وطلبات السحب
- نزاعات الدمج: لا داعي للذعر — افهمها وحُلّها
- سير عمل Git في الفرق الحقيقية: أي سير عمل تختار
- الأدوات المتقدمة: rebase، stash، cherry-pick والعلامات (tags)
- المشروع النهائي: محاكاة التطوير الجماعي الفعلي