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

تعديل الالتزام الأخير عبر الأمر git commit --amendAmending Commits with Git Commit Amend

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

يحدث كثيراً أن تضغط مفتاح الإدخال لتنفيذ git commit ثم تلاحظ فوراً خطأً إملائياً في عنوان الرسالة، أو تتذكر أنك نسيت تجهيز ملف styles.css المرتبط بنفس الميزة. بدلاً من تشويه سجل المشروع بالتزامات إضافية مربكة مثل «نسيت إضافة ملف»، يوفر Git الخيار git commit --amend لتحديث الالتزام الأخير مباشرة:

  • حفظ ذرية الالتزامات: إبقاء التعديلات المترابطة ورسالتها الصحيحة في لقطة واحدة نظيفة.
  • تصحيح فوري للرأس: يعمل مباشرة على الالتزام الذي يشير إليه HEAD حالياً.
مخطط يوضح تعديل رسالة الالتزام الأخير أو إضافة ملف منسي عبر git commit --amend وتوليد بصمة SHA-1 جديدة
Shell
# 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 لفتح الرسالة داخل محرر النصوص وتعديلها.

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

عندما تنسى تضمين ملف معدل أو جديد في التزامك الأخير، يمكنك إلحاقه بنفس الالتزام في خطوتين بسيطتين دون الحاجة لإعادة كتابة الرسالة:

  1. جهّز الملف المنسي أولاً بالأمر git add <file>.
  2. نفّذ الأمر git commit --amend --no-edit؛ حيث يأمر الخيار --no-edit نظام Git بالاحتفاظ برسالة الالتزام الحالية كما هي دون فتح محرر النصوص.
Shell
# 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 ليحل الالتزام النظيف محل الالتزام السابق.

Shell
# 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 مختلفة تماماً، فإنه يُصنّف ضمن أوامر إعادة كتابة التاريخ. لذلك التزم دائماً بالقاعدة الهندسية الذهبية: عدّل بحرية الالتزامات المحلية التي لم تغادر جهازك بعد، وتجنب تعديل الالتزامات التي شاركتها مع بقية أعضاء الفريق.

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

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

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

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

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. بدّل بين الحالات الثلاث في المختبر التفاعلي ضمن قسم تصحيح الرسالة عبر --amend وقارن الأوامر والمخرجات.

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

مساحة التحدي

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

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

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

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

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

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

ماذا يحدث لبصمة SHA-1 الخاصة بالالتزام الأخير عند تنفيذ الأمر git commit --amend؟

لأن كائنات Git غير قابلة للتعديل في مكانها، ينشئ الخيار --amend كائن التزام جديداً ببصمة SHA-1 جديدة تماماً.

02

يتيح تمرير الخيار --no-edit مع git commit --amend دمج التعديلات المجهزة في الالتزام الأخير مع الإبقاء على رسالته الحالية دون تغيير.

صواب؛ يحتفظ الخيار --no-edit برسالة الالتزام الأخير كما هي دون فتح محرر النصوص.

03

ما الخطوتان الصحيحتان لإلحاق ملف styles.css المنسي بالالتزام الأخير دون تغيير نص الرسالة؟

جهّز الملف أولاً بالأمر git add styles.css ثم نفّذ git commit --amend --no-edit.

04

أي خيار يحدّث اسم المؤلف وبريده الإلكتروني في الالتزام الأخير ليطابق إعدادات git config الحالية عند التعديل؟

يحدّث الخيار --reset-author بيانات المؤلف والتوقيت الزمني في الالتزام المعدل.

05

يعمل الأمر git commit --amend على الالتزام الأخير (HEAD) فقط ولا يعدل التزاماً قديماً قبل ثلاث خطوات بشكل مباشر.

صواب؛ يقتصر عمل الخيار --amend على استبدال الالتزام الأخير الذي يشير إليه HEAD.

06

كيف تصحح خطأً إملائياً في رسالة الالتزام الأخير مباشرة من الطرفية دون فتح محرر نصوص خارجي؟

مرّر الخيار -m مع النص المصحح مباشرة إلى الأمر git commit --amend.

07

لماذا ينبغي تجنب تشغيل git commit --amend على التزامات تمت مشاركتها مسبقاً مع أعضاء الفريق؟

لأن --amend يغير بصمة SHA-1 للالتزام، مما يعيد كتابة تاريخ قد يكون الزملاء قد بنوا عملهم عليه بالفعل.

08

يساعد فحص git status قبل تشغيل git commit --amend على ضمان عدم دمج تعديلات مجهزة غير مقصودة داخل الالتزام.

صواب؛ لأن أي تعديلات موجودة في منطقة التجهيز ستُدمج تلقائياً في الالتزام المعدل.