في هذا الدرس 6تصفّح المواضيع
عندما تكتشف أن التزاماً سابقاً قد أدخل خطأً برمجياً في المشروع، ستحتاج إلى طريقة تلغي أثره دون مسح السجل التاريخي. يتميز الأمر git revert <commit> بأنه أداة تراجع آمنة تماماً لا تعيد كتابة التاريخ؛ إذ يفحص الالتزام المستهدف، ويحسب الفروق العكسية الدقيقة له (فيحذف كل سطر أضافه ذلك الالتزام، ويعيد كل سطر حذفه)، ثم يسجل التزاماً جديداً تماماً في قمة السجل:
- حفظ كامل للتاريخ الرقابي: يبقى كل من الالتزام الأصلي والتزام التراجع ظاهرين في
git logلتوثيق دورة الإصلاح. - آمن تماماً في العمل الجماعي: لأنه يضيف التزاماً جديداً للأمام ولا يمسح بصمات سابقة يعتمد عليها الفريق.
# Undo the most recent commit safely with a new inverse commit
git revert HEAD --no-edit
# Inspect history: both commits remain intact
git log --oneline -n 2
# e5f9a01 (HEAD -> main) Revert "Add experimental banner"
# b8c4d12 Add experimental banner
لا يقتصر عمل git revert على الالتزام الأخير HEAD؛ بل يمكنك تمرير البصمة المختصرة لأي التزام قديم من مخرجات git log --oneline (مثل git revert 8c3e512) لإلغاء تعديلات ذلك الالتزام جراحياً مع الحفاظ على جميع الالتزامات التي أُضيفت بعده سليمة.
# Find the commit hash in history
git log --oneline -n 4
# Surgically revert commit 8c3e512 without losing newer commits
git revert 8c3e512 --no-edit
يفتح الأمر git revert افتراضياً محرر النصوص المعتمد لتتمكن من كتابة سبب التراجع عن ذلك الالتزام. وإذا أردت اعتماد رسالة التراجع القياسية فوراً دون فتح المحرر، مرّر الخيار --no-edit.
# Revert the previous commit (HEAD~1) using default message
git revert HEAD~1 --no-edit
كيف تختار الأداة الصحيحة بين أوامر التراجع التي درستها حتى الآن؟ اعتمد هذا المعيار الهندسي الواضح:
- استخدم
git restoreعندما يكون التعديل الخاطئ غير ملتزم به بعد في مجلد العمل أو منطقة التجهيز. - استخدم
git commit --amendلتصحيح الالتزام المحلي الأخير فقط قبل مشاركته. - استخدم
git revertلإلغاء أثر أي التزام محفوظ مع الحفاظ على سجل تاريخي كامل وشفاف فيgit log.
# Verify that the revert commit cleanly undid the target change
git show HEAD --stat
يلخص الجدول المقارن التالي خيارات الأمر git revert وأثرها على سجل الالتزامات:
| الأمر | هل ينشئ التزاماً جديداً؟ | هل يعيد كتابة التاريخ؟ | الاستخدام الهندسي الأساسي |
|---|---|---|---|
git revert HEAD | نعم فوراً | لا (يحفظ جميع البصمات السابقة) | إلغاء أثر آخر التزام بأمان مع فتح محرر الرسالة |
git revert <sha> --no-edit | نعم فوراً | لا (يحفظ جميع البصمات السابقة) | عكس التزام محدد بالاعتماد على الرسالة القياسية تلقائياً |
git revert -n <sha> | لا (يجهز الفروق العكسية فقط) | لا | معاينة التعديلات العكسية أو دمج عدة تراجعات في التزام واحد |
git revert --abort | لا | لا | إلغاء عملية التراجع الجارية وإعادة المستودع لحالته السابقة |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعلمت في هذا الدرس آلية عمل الأمر git revert لإلغاء أثر الالتزامات السابقة بأمان عبر إنشاء التزام عكسي جديد، واستهداف أي بصمة تاريخية، واستخدام الخيارين --no-edit و-n. الخطوة التالية: انتقل الآن إلى الدرس رقم 18 «إعادة ضبط المؤشر والمناطق الثلاث عبر git reset وgit reflog» لفهم الفرق بين أوضاع إعادة الضبط الثلاثة وشبكة الأمان المرجعية.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 git revert التراجع الآمن git revert
- تراجع عن تعديلات أي التزام سابق بأمان تام دون مسح التاريخ عبر إنشاء التزام عكسي مضاد بالأمر git revert وخياري --no-edit و--no-commit.
- للمراجعة
- 02 Inverse Commits in git revert فكرة الالتزام العكسي المضاد
- المفهوم الأساسي لدرس التراجع الآمن بالتزام عكسي عبر الأمر git revert في سير عمل Git.
- للمراجعة
- 03 Reverting Latest or Old Commit عكس التزام أخير أو سابق
- التطبيق العملي المباشر لمفهوم عكس التزام أخير أو سابق.
- للمراجعة
- 04 --no-edit and --no-commit Flags الخياران --no-edit و--no-commit
- قواعد التحقق وأفضل الممارسات الخاصة بـ الخياران --no-edit و--no-commit.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 SHA-1 SHA-1
- Secure Hash Algorithm 1
- دالة التجزئة التشفيرية المستخدمة لتوليد معرف فريد لكل كائن والتزام في Git.
- للمراجعة
- 02 DVCS DVCS
- Distributed Version Control System
- معمارية يمتلك فيها كل مطور نسخة محلية كاملة من تاريخ المستودع وكائناته.
- للمراجعة
- 03 CLI CLI
- Command-Line Interface
- واجهة سطر الأوامر النصية التي تُنفذ فيها أوامر فحص السجل والتراجع.
- للمراجعة
- 04 HEAD HEAD
- Current Active Commit Pointer
- المؤشر المرجعي الذي يشير إلى الالتزام النشط حالياً في المستودع المحلي.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ أوامر الطرفية المشروحة في فكرة الالتزام العكسي المضاد داخل مستودع تجريبي محلي وافحص المخرجات.
-
بدّل بين الحالات الثلاث في المختبر التفاعلي ضمن قسم عكس التزام أخير أو سابق وقارن الأوامر والمخرجات.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
كيف يلغي الأمر git revert التعديلات التي أحدثها التزام سابق؟
يحسب الأمر git revert الفروق العكسية للالتزام المستهدف ويسجل التزاماً جديداً في قمة السجل دون حذف الالتزام القديم.
بعد تنفيذ الأمر git revert على التزام معين، يبقى كل من الالتزام الأصلي والتزام التراجع الجديد ظاهرين في مخرجات git log.
صواب؛ لا يمسح الأمر git revert الالتزامات من التاريخ بل يضيف التزاماً عكسياً جديداً.
ما أثر تمرير الخيار -n (أو --no-commit) إلى الأمر git revert؟
يطبق الخيار -n التعديلات العكسية في مجلد العمل ومنطقة التجهيز دون إنشاء الالتزام تلقائياً.
أي خيار يوجه الأمر git revert لاعتماد رسالة التراجع القياسية تلقائياً دون فتح محرر النصوص؟
يتجاوز الخيار --no-edit فتح محرر النصوص ويعتمد رسالة التراجع المولدة تلقائياً.
يؤدي تنفيذ git revert على التزام سرّب كلمة مرور إلى مسحها تماماً من سجلات git log -p السابقة.
خطأ؛ لأن الالتزام الأصلي يبقى محفوظاً في السجل التاريخي ويظل قابلاً للقراءة عند فحص اللقطة القديمة.
ما الأمر الذي يلغي عملية git revert متوقفة ويعيد المستودع إلى حالته السابقة بأمان؟
يلغي الأمر git revert --abort عملية التراجع الجارية ويعيد المستودع لحالته قبل التنفيذ.
لماذا يُفضل الأمر git revert على أوامر إعادة كتابة التاريخ عند التراجع عن التزام يمتلكه بقية أعضاء الفريق؟
لأن git revert يضيف التزاماً جديداً للأمام ولا يغير بصمات SHA-1 للالتزامات الموجودة لدى الفريق.
يمكنك تمرير بصمة التزام قديم محدد (مثل git revert 8c3e512) لإلغاء تعديلاته دون مسح الالتزامات التي أُنشئت بعده.
صواب؛ يعكس الأمر git revert تعديلات ذلك الالتزام المحدد فقط في التزام جديد فوق الرأس.