انتقل إلى محتوى الدرس
الدرس 17
دورة Version Control

التراجع الآمن بالتزام عكسي عبر الأمر git revertGit Revert

تراجع عن تعديلات أي التزام سابق بأمان تام دون مسح التاريخ عبر إنشاء التزام عكسي مضاد بالأمر git revert وخياري --no-edit و--no-commit.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

عندما تكتشف أن التزاماً سابقاً قد أدخل خطأً برمجياً في المشروع، ستحتاج إلى طريقة تلغي أثره دون مسح السجل التاريخي. يتميز الأمر git revert <commit> بأنه أداة تراجع آمنة تماماً لا تعيد كتابة التاريخ؛ إذ يفحص الالتزام المستهدف، ويحسب الفروق العكسية الدقيقة له (فيحذف كل سطر أضافه ذلك الالتزام، ويعيد كل سطر حذفه)، ثم يسجل التزاماً جديداً تماماً في قمة السجل:

  • حفظ كامل للتاريخ الرقابي: يبقى كل من الالتزام الأصلي والتزام التراجع ظاهرين في git log لتوثيق دورة الإصلاح.
  • آمن تماماً في العمل الجماعي: لأنه يضيف التزاماً جديداً للأمام ولا يمسح بصمات سابقة يعتمد عليها الفريق.
مخطط يوضح كيف يحسب الأمر git revert الفروق العكسية لالتزام سابق ويسجل التزاماً جديداً يحافظ على التاريخ
Shell
# 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) لإلغاء تعديلات ذلك الالتزام جراحياً مع الحفاظ على جميع الالتزامات التي أُضيفت بعده سليمة.

Shell
# 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.

Shell
# Revert the previous commit (HEAD~1) using default message
git revert HEAD~1 --no-edit

قد تحتاج أحياناً إلى التراجع عن التزامين أو ثلاثة التزامات مترابطة ودمج هذا التراجع في التزام عكسي واحد، أو معاينة الملفات بعد عكسها قبل حفظ الالتزام. يوجّه الخيار -n (أو --no-commit) نظام Git إلى تطبيق التعديلات العكسية داخل مجلد العمل ومنطقة التجهيز فقط دون حفظ الالتزام تلقائياً.

Shell
# Stage inverse changes of two commits without committing
git revert -n HEAD
git revert -n HEAD~1

# Review staged changes and record a combined commit
git status -s
git commit -m "Revert experimental header and navbar"

كيف تختار الأداة الصحيحة بين أوامر التراجع التي درستها حتى الآن؟ اعتمد هذا المعيار الهندسي الواضح:

  • استخدم git restore عندما يكون التعديل الخاطئ غير ملتزم به بعد في مجلد العمل أو منطقة التجهيز.
  • استخدم git commit --amend لتصحيح الالتزام المحلي الأخير فقط قبل مشاركته.
  • استخدم git revert لإلغاء أثر أي التزام محفوظ مع الحفاظ على سجل تاريخي كامل وشفاف في git log.
Shell
# 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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
المؤشر المرجعي الذي يشير إلى الالتزام النشط حالياً في المستودع المحلي.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ أوامر الطرفية المشروحة في فكرة الالتزام العكسي المضاد داخل مستودع تجريبي محلي وافحص المخرجات.

  2. بدّل بين الحالات الثلاث في المختبر التفاعلي ضمن قسم عكس التزام أخير أو سابق وقارن الأوامر والمخرجات.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

كيف يلغي الأمر git revert التعديلات التي أحدثها التزام سابق؟

يحسب الأمر git revert الفروق العكسية للالتزام المستهدف ويسجل التزاماً جديداً في قمة السجل دون حذف الالتزام القديم.

02

بعد تنفيذ الأمر git revert على التزام معين، يبقى كل من الالتزام الأصلي والتزام التراجع الجديد ظاهرين في مخرجات git log.

صواب؛ لا يمسح الأمر git revert الالتزامات من التاريخ بل يضيف التزاماً عكسياً جديداً.

03

ما أثر تمرير الخيار -n (أو --no-commit) إلى الأمر git revert؟

يطبق الخيار -n التعديلات العكسية في مجلد العمل ومنطقة التجهيز دون إنشاء الالتزام تلقائياً.

04

أي خيار يوجه الأمر git revert لاعتماد رسالة التراجع القياسية تلقائياً دون فتح محرر النصوص؟

يتجاوز الخيار --no-edit فتح محرر النصوص ويعتمد رسالة التراجع المولدة تلقائياً.

05

يؤدي تنفيذ git revert على التزام سرّب كلمة مرور إلى مسحها تماماً من سجلات git log -p السابقة.

خطأ؛ لأن الالتزام الأصلي يبقى محفوظاً في السجل التاريخي ويظل قابلاً للقراءة عند فحص اللقطة القديمة.

06

ما الأمر الذي يلغي عملية git revert متوقفة ويعيد المستودع إلى حالته السابقة بأمان؟

يلغي الأمر git revert --abort عملية التراجع الجارية ويعيد المستودع لحالته قبل التنفيذ.

07

لماذا يُفضل الأمر git revert على أوامر إعادة كتابة التاريخ عند التراجع عن التزام يمتلكه بقية أعضاء الفريق؟

لأن git revert يضيف التزاماً جديداً للأمام ولا يغير بصمات SHA-1 للالتزامات الموجودة لدى الفريق.

08

يمكنك تمرير بصمة التزام قديم محدد (مثل git revert 8c3e512) لإلغاء تعديلاته دون مسح الالتزامات التي أُنشئت بعده.

صواب؛ يعكس الأمر git revert تعديلات ذلك الالتزام المحدد فقط في التزام جديد فوق الرأس.