في هذا الدرس 6تصفّح المواضيع
يحدث كثيراً أن تضغط مفتاح الإدخال لتنفيذ git commit ثم تلاحظ فوراً خطأً إملائياً في عنوان الرسالة، أو تتذكر أنك نسيت تجهيز ملف styles.css المرتبط بنفس الميزة. بدلاً من تشويه سجل المشروع بالتزامات إضافية مربكة مثل «نسيت إضافة ملف»، يوفر Git الخيار git commit --amend لتحديث الالتزام الأخير مباشرة:
- حفظ ذرية الالتزامات: إبقاء التعديلات المترابطة ورسالتها الصحيحة في لقطة واحدة نظيفة.
- تصحيح فوري للرأس: يعمل مباشرة على الالتزام الذي يشير إليه
HEADحالياً.
# Inspect the recent commit that needs a quick fix
git log --oneline -n 1
# a4f9c21 (HEAD -> main) Add semntic header to index.html
إذا كانت ملفات الالتزام الأخير كاملة وتريد فقط تصحيح نص رسالة الالتزام الأخير (أي أن منطقة التجهيز فارغة من أي تعديلات جديدة)، نفّذ الأمر git commit --amend -m "New message" لتحديث العنوان فوراً، أو نفّذ git commit --amend دون الخيار -m لفتح الرسالة داخل محرر النصوص وتعديلها.
# Rewrite the last commit message inline (-m)
git commit --amend -m "Add semantic header to index.html"
# Verify the updated message and new short hash
git log --oneline -n 1
# b7e3a10 (HEAD -> main) Add semantic header to index.html
عندما تنسى تضمين ملف معدل أو جديد في التزامك الأخير، يمكنك إلحاقه بنفس الالتزام في خطوتين بسيطتين دون الحاجة لإعادة كتابة الرسالة:
- جهّز الملف المنسي أولاً بالأمر
git add <file>. - نفّذ الأمر
git commit --amend --no-edit؛ حيث يأمر الخيار--no-editنظام Git بالاحتفاظ برسالة الالتزام الحالية كما هي دون فتح محرر النصوص.
# 1. Stage the forgotten stylesheet
git add styles.css
# 2. Amend the last commit while keeping its message
git commit --amend --no-edit
# 3. Verify both files are now in the single latest commit
git show --stat
ماذا لو أدرجت ملفاً حساساً بالخطأ داخل الالتزام الأخير مباشرة قبل مشاركته؟ يمكنك إزالته فوراً من ذلك الالتزام عبر إخراجه من الفهرس بالأمر git rm --cached، وإضافة اسمه إلى ملف .gitignore وتجهيزه، ثم تنفيذ git commit --amend --no-edit ليحل الالتزام النظيف محل الالتزام السابق.
# Remove accidentally committed file from Index only
git rm --cached local-keys.txt
# Replace the last commit with the cleaned Index
git commit --amend --no-edit
نظراً لأن الأمر git commit --amend يستبدل كائن الالتزام الأخير بكائن جديد يحمل بصمة SHA-1 مختلفة تماماً، فإنه يُصنّف ضمن أوامر إعادة كتابة التاريخ. لذلك التزم دائماً بالقاعدة الهندسية الذهبية: عدّل بحرية الالتزامات المحلية التي لم تغادر جهازك بعد، وتجنب تعديل الالتزامات التي شاركتها مع بقية أعضاء الفريق.
# Inspect the amended commit hash and file list
git show --stat --oneline
# c9d8e71 (HEAD -> main) Add semantic header to index.html
# index.html | 8 ++++++++
# styles.css | 5 +++++
يلخص الجدول المقارن التالي أنماط استخدام الأمر git commit --amend والنتيجة الدقيقة لكل نمط:
| صيغة الأمر | هل يتطلب تعديلات مجهزة؟ | النتيجة الفعلية في السجل |
|---|---|---|
git commit --amend -m "New msg" | لا يشترط | استبدال رسالة الالتزام الأخير وتوليد بصمة SHA-1 جديدة |
git add <file> ثم git commit --amend --no-edit | نعم | دمج الملف المنسي داخل الالتزام الأخير مع بقاء الرسالة الأصلية |
git rm --cached <file> ثم git commit --amend --no-edit | نعم (إلغاء تتبع مجهز) | إزالة ملف أُدرج بالخطأ من لقطة الالتزام الأخير |
git commit --amend --reset-author --no-edit | لا يشترط | تحديث اسم المؤلف وبريده وتوقيت الالتزام من الإعدادات الحالية |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس تعديل رسالة الالتزام الأخير عبر git commit --amend -m، ودمج الملفات المنسية دون فتح المحرر بالخيار --no-edit، وإزالة الملفات المدرجة بالخطأ من الرأس، وفهم سبب تغير بصمة SHA-1 عند التعديل. الخطوة التالية: انتقل الآن إلى الدرس رقم 17 «التراجع الآمن بالتزام عكسي عبر الأمر git revert» لتعلم إلغاء أثر التزام سابق بأمان دون إعادة كتابة التاريخ.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 git commit --amend تعديل الالتزام الأخير
- صحّح الأخطاء الإملائية في رسالة آخر التزام أو أدمج الملفات المنسية فيه عبر الأمر git commit --amend والخيار --no-edit مع فهم تغير بصمة SHA-1.
- للمراجعة
- 02 Mistakes in the Latest Commit أخطاء الالتزام الأخير الشائعة
- المفهوم الأساسي لدرس تعديل الالتزام الأخير عبر الأمر git commit --amend في سير عمل Git.
- للمراجعة
- 03 Rewriting Last Commit Message تصحيح الرسالة عبر --amend
- التطبيق العملي المباشر لمفهوم تصحيح الرسالة عبر --amend.
- للمراجعة
- 04 Adding Forgotten Files --no-edit إلحاق ملف منسي بـ --no-edit
- قواعد التحقق وأفضل الممارسات الخاصة بـ إلحاق ملف منسي بـ --no-edit.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات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
- المؤشر المرجعي الذي يشير إلى الالتزام النشط حالياً في المستودع المحلي.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ أوامر الطرفية المشروحة في أخطاء الالتزام الأخير الشائعة داخل مستودع تجريبي محلي وافحص المخرجات.
-
بدّل بين الحالات الثلاث في المختبر التفاعلي ضمن قسم تصحيح الرسالة عبر --amend وقارن الأوامر والمخرجات.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ماذا يحدث لبصمة SHA-1 الخاصة بالالتزام الأخير عند تنفيذ الأمر git commit --amend؟
لأن كائنات Git غير قابلة للتعديل في مكانها، ينشئ الخيار --amend كائن التزام جديداً ببصمة SHA-1 جديدة تماماً.
يتيح تمرير الخيار --no-edit مع git commit --amend دمج التعديلات المجهزة في الالتزام الأخير مع الإبقاء على رسالته الحالية دون تغيير.
صواب؛ يحتفظ الخيار --no-edit برسالة الالتزام الأخير كما هي دون فتح محرر النصوص.
ما الخطوتان الصحيحتان لإلحاق ملف styles.css المنسي بالالتزام الأخير دون تغيير نص الرسالة؟
جهّز الملف أولاً بالأمر git add styles.css ثم نفّذ git commit --amend --no-edit.
أي خيار يحدّث اسم المؤلف وبريده الإلكتروني في الالتزام الأخير ليطابق إعدادات git config الحالية عند التعديل؟
يحدّث الخيار --reset-author بيانات المؤلف والتوقيت الزمني في الالتزام المعدل.
يعمل الأمر git commit --amend على الالتزام الأخير (HEAD) فقط ولا يعدل التزاماً قديماً قبل ثلاث خطوات بشكل مباشر.
صواب؛ يقتصر عمل الخيار --amend على استبدال الالتزام الأخير الذي يشير إليه HEAD.
كيف تصحح خطأً إملائياً في رسالة الالتزام الأخير مباشرة من الطرفية دون فتح محرر نصوص خارجي؟
مرّر الخيار -m مع النص المصحح مباشرة إلى الأمر git commit --amend.
لماذا ينبغي تجنب تشغيل git commit --amend على التزامات تمت مشاركتها مسبقاً مع أعضاء الفريق؟
لأن --amend يغير بصمة SHA-1 للالتزام، مما يعيد كتابة تاريخ قد يكون الزملاء قد بنوا عملهم عليه بالفعل.
يساعد فحص git status قبل تشغيل git commit --amend على ضمان عدم دمج تعديلات مجهزة غير مقصودة داخل الالتزام.
صواب؛ لأن أي تعديلات موجودة في منطقة التجهيز ستُدمج تلقائياً في الالتزام المعدل.