كيفية تعديل آخر إيداع في Git (الرسالة والملفات والمؤلف والتراجع)
سواء اكتشفت خطأً إملائيًا في رسالة الإيداع، أو نسيت تجهيز ملف، أو أودعت ملفًا سريًا بالخطأ، أو استخدمت بريدًا إلكترونيًا غير صحيح للمؤلف، فإن الأمر git commit --amend يستبدل الإيداع الأخير بنظافة دون إرباك سجل الفرع بإيداعات إصلاح صغيرة.
بقلم Kodmora
شركة البرمجيات المطوّرة لـGitTree
- الإيداعات
- التجهيز
- سجل الإيداعات
- التراجع والاستعادة
- إعادة التأسيس
في هذه الصفحة
لتعديل أحدث إيداع على فرعك الحالي، نفّذ الأمر git commit --amend. إذا لم تكن هناك تغييرات مجهّزة في منطقة التجهيز (Index)، يستبدل Git الإيداع الأخير بالرسالة المحدَّثة؛ وإذا جهّزت تغييرات جديدة أولًا، يدمجها Git داخل الإيداع الأخير ويتيح لك الإبقاء على الرسالة الحالية باستخدام --no-edit أو إعادة صياغتها في مكانها. وتفضّل العمل عبر واجهة رسومية؟ في GitTree على أنظمة macOS وWindows وLinux، فعّل خيار تعديل الإيداع السابق (Amend Previous Commit) في لوحة الإيداع (أو انقر بزر الفأرة الأيمن على أحدث إيداع في المخطط واختر Edit Commit Message…) لتعبئة الرسالة تلقائيًا، وتجهيز أسطر محددة أو إلغاء تجهيزها، ورؤية تنبيه واضح إذا كان الإيداع قد دُفِع إلى المستودع البعيد، والتراجع في أي لحظة بنقرة واحدة عبر تراجع (Undo).
مرجع سريع: جميع أوامر git commit --amend
اختر الأمر المطابق لما تريد إصلاحه في أحدث إيداع لديك، أو انتقل إلى القسم المفصّل أدناه للاطلاع على الحالات الخاصة، وخطافات Git (Hooks)، والإيداعات الموقّعة، والبدائل الرسومية.
| ما الذي تريد إصلاحه | الأمر المطلوب | ما الذي يحدث للإيداع |
|---|---|---|
| إصلاح خطأ في رسالة آخر إيداع مباشرةً من الطرفية | git commit --amend -m "New message" | يستبدل HEAD بإيداع جديد يحمل الرسالة الجديدة وأي تغييرات مجهّزة حاليًا |
| تحرير رسالة إيداع متعددة الأسطر في محررك النصي | git commit --amend | يفتح محرر Git المعتمد لديك مع تعبئة عنوان الإيداع الحالي وتفاصيله مسبقًا |
| تغيير الرسالة فقط (مع تجاهل الملفات المجهّزة حاليًا) | git commit --amend --only -m "New message" | يعيد كتابة رسالة HEAD فقط مع ترك منطقة التجهيز الحالية كما هي للإيداع التالي |
| إضافة ملف منسيّ مع الاحتفاظ بنفس رسالة الإيداع | git add <file> && git commit --amend --no-edit | يدمج <file> في الإيداع الأخير دون فتح المحرر النصي |
| إضافة أسطر أو مقاطع محددة إلى آخر إيداع | git add -p && git commit --amend --no-edit | يتيح لك تجهيز مقاطع مختارة تفاعليًا ثم ضمّ تلك المقاطع فقط إلى HEAD |
| ضمّ جميع الملفات المتتبعة المعدّلة إلى آخر إيداع | git commit -a --amend --no-edit | يجهّز كل ملف متتبع تم تعديله أو حذفه ويعدّل HEAD في خطوة واحدة (يتجاهل الملفات غير المتتبعة) |
| إزالة ملف أُودِع بالخطأ (مع بقائه على القرص) | git restore --source=HEAD~1 --staged <file> && git commit --amend --no-edit | يعيد حالة <file> في منطقة التجهيز إلى HEAD~1 مع الحفاظ على الملف في شجرة العمل المحلية |
| تصحيح اسم المؤلف وبريده الإلكتروني في آخر إيداع | git commit --amend --reset-author --no-edit | يحدّث مؤلف الإيداع (والطابع الزمني) ليطابق إعدادات user.name وuser.email الحالية |
| تحديث الفرع البعيد بعد تعديل إيداع مدفوع مسبقًا | git push --force-with-lease --force-if-includes | يحدّث الفرع البعيد بأمان فقط إذا لم يدفع أحد زملائك إيداعات جديدة وكان طرف الفرع البعيد ضمن سجلّك المحلي |
التراجع عن تنفيذ git commit --amend بالخطأ | git reset --soft HEAD@{1} | يعيد مؤشر الفرع إلى الإيداع الأصلي قبل التعديل مع إبقاء أي تغييرات إضافية مجهّزة |
ماذا يفعل git commit --amend فعليًا خلف الكواليس؟
كل معرّف إيداع (SHA-1 أو SHA-256) في Git هو بصمة تشفيرية تُحسَب من خمسة عناصر: لقطة شجرة الملفات (Tree)، ومعرّف الإيداع الأب (Parent)، واسم وبريد ووقت المؤلف (Author)، واسم وبريد ووقت المُودِع (Committer)، ورسالة الإيداع. تغيير حرف واحد في الرسالة—أو تغيّر وقت الإيداع بثانية واحدة—ينتج عنه معرّف SHA مختلف تمامًا.
# Before git commit --amend:
A --- B --- C <-- main (HEAD)
# After git commit --amend:
A --- B --- C' <-- main (HEAD)
\
C (still in git reflog as HEAD@{1} until garbage collection)عند تنفيذ git commit --amend، يأخذ Git المحتوى الموجود حاليًا في منطقة التجهيز (Index)، ويدمجه مع مؤشر الأب الخاص بالإيداع C (أي B)، ثم يكتب كائن إيداع جديدًا C' ويوجّه مؤشر الفرع الحالي إليه. أما الإيداع الأصلي C فلا يُحذَف فورًا؛ بل يبقى مسجّلًا في سجل المراجع المحلي (HEAD@{1} في git reflog) لمدة تتراوح بين 30 و90 يومًا، ولذلك يمكنك دائمًا استعادته محليًا سواء عبر git reflog أو عبر أداتَي التراجع والإعادة والمفقودات (Lost & Found) في GitTree.
1. تغيير رسالة الإيداع الأخير
إذا أنشأت إيداعًا ولاحظت فورًا خطأً إملائيًا، أو رقم تذكرة غير صحيح، أو نسيت بادئة Conventional Commits (feat: أو fix: أو chore:)، فتحقّق أولًا عبر git status للتأكد مما إذا كانت هناك ملفات مجهّزة.
تمرير رسالة جديدة من سطر واحد أو عدة فقرات باستخدام -m
لاستبدال الرسالة مباشرةً من الطرفية دون فتح المحرر النصي، مرّر الخيار -m. ويمكنك تكرار -m لكتابة سطر عنوان متبوع بفقرة شرح:
# Replace the commit subject inline
git commit --amend -m "fix(auth): validate refresh token expiry before rotation"
# Replace both the subject line and body paragraph
git commit --amend \
-m "fix(auth): validate refresh token expiry before rotation" \
-m "Prevents expired tokens from issuing a new session when clock skew exceeds 30s."تحرير الرسالة الحالية في المحرر النصي
عندما يحتوي الإيداع بالفعل على وصف مفصّل متعدد الأسطر أو ترويسات ختامية (Co-authored-by: أو Signed-off-by:) لا تود إعادة كتابتها من الصفر، نفّذ git commit --amend بدون -m:
git commit --amendيفتح Git المحرر المضبوط في core.editor (مثل Vim أو Nano أو VS Code أو Zed) مع تحميل رسالة الإيداع الحالية. احفظ الملف وأغلقه لاعتماد الإيداع المعدّل. وإذا عدلت عن رأيك أثناء فتح المحرر، فاحذف نص الرسالة بالكامل واترك الملف فارغًا ثم احفظه؛ سيلغي Git العملية برسالة Aborting commit due to empty commit message ويترك HEAD دون أي تغيير.
2. إضافة ملفات منسية أو أسطر محددة إلى آخر إيداع
نسيان حفظ ملف أو تجهيز ملف اختبار أو تشغيل أداة تنسيق الكود قبل الإيداع هو أكثر الأسباب شيوعًا لاستخدام --amend. جهّز التغييرات المنسية أولًا، ثم نفّذ التعديل مع --no-edit ليحتفظ Git برسالة الإيداع الحالية دون فتح المحرر:
# Stage the forgotten file (or files)
git add src/auth/token-validator.test.ts
# Fold the staged file into the last commit and keep the existing message
git commit --amend --no-editتجهيز أسطر أو مقاطع محددة فقط قبل التعديل
ماذا لو كانت شجرة العمل تحتوي على إصلاح من 3 أسطر ينتمي إلى الإيداع السابق، إلى جانب 40 سطرًا من العمل الجاري للميزة التالية؟ لا تنفّذ git add . ولا git commit -a --amend. بدلًا من ذلك، جهّز المقاطع أو الأسطر المطلوبة فقط باستخدام وضع الرقع التفاعلي (المشروح بالتفصيل في دليل git add -p وتجهيز أسطر محددة):
# Choose y/n/s (split) for each changed hunk
git add -p src/auth/token-validator.ts
# Verify what is staged vs what stays in the working tree
git diff --staged
# Amend the last commit with only the staged hunks
git commit --amend --no-editفي GitTree، لن تحتاج إلى تقسيم المقاطع يدويًا في الطرفية (s وe): انقر على أي ملف في Unstaged Changes، وحدّد الأسطر المطلوبة أو انقر Stage Hunk في عرض الفروق جنبًا إلى جنب أو المدمج، ثم فعّل Amend Previous Commit. راجع أيضًا دليل git diff الشامل لمعرفة كيف يمنع فحص الفروق المجهّزة تسرب تغييرات غير مقصودة إلى الإيداع.

3. إزالة ملف أُودِع بالخطأ من آخر إيداع (دون حذفه من القرص)
لنفترض أنك نفّذت git add . وأودعت بالخطأ ملف .env.local، أو ملف بناء كبير الحجم، أو ملفًا يخص طلب سحب آخر. تعتمد طريقة إزالته من HEAD على ما إذا كان الملف موجودًا أصلًا في الإيداع السابق (HEAD~1) أم أُضيف لأول مرة في HEAD.
الحالة أ: إزالة ملف أُضيف حديثًا في آخر إيداع (مع إبقائه على القرص)
استخدم git rm --cached لإزالة الملف من فهرس Git مع ترك الملف الفعلي في مجلد مشروعك، ثم عدّل الإيداع:
# Remove the file from the index only (leaves the file on disk)
git rm --cached .env.local
# Optional: add it to .gitignore so it never gets staged again
echo ".env.local" >> .gitignore
git add .gitignore
# Rewrite the last commit without .env.local
git commit --amend --no-editالحالة ب: إخراج تعديلات ملف متتبع من آخر إيداع (مع الاحتفاظ بتعديلاتك المحلية)
إذا كان الملف متتبعًا مسبقًا في HEAD~1 وأدخلت عليه تعديلات بالخطأ ضمن HEAD، فلا تستخدم git rm --cached (لأن ذلك سيسجّل حذف الملف بالكامل في HEAD!). بدلًا من ذلك، استعد نسخة الفهرس لذلك الملف من HEAD~1:
# Reset only the staged index state of <file> back to HEAD~1
git restore --source=HEAD~1 --staged src/config/database.ts
# Amend HEAD: the commit no longer touches database.ts, and your local edits stay in the working tree
git commit --amend --no-editأما إذا كنت ترغب في التخلص من التعديلات المحلية غير المرغوب فيها أو تنظيف الملفات غير المتتبعة نهائيًا، فراجع كيفية التخلص من التغييرات وتنظيف الملفات غير المتتبعة في Git وكيفية استعادة ملف محذوف في Git.
4. تغيير اسم المؤلف أو البريد الإلكتروني أو تاريخ آخر إيداع
عندما تنشئ إيداعًا على جهاز جديد قبل ضبط user.email، أو داخل مستودع عمل بينما بريدك الشخصي على GitHub مضبوط عالميًا، يسجّل الإيداع هوية غير صحيحة. يمكّنك git commit --amend من تصحيح بيانات المؤلف دون المساس بأي ملف.
# Option 1: Set an explicit author name and email on the last commit
git commit --amend --author="Jane Doe <jane@company.com>" --no-edit
# Option 2: Update git config first, then reset the commit author to match
git config user.name "Jane Doe"
git config user.email "jane@company.com"
git commit --amend --reset-author --no-edit
# Option 3: Amend the author date as well
git commit --amend --date="2026-11-11T14:30:00+02:00" --no-edit5. كيفية تعديل إيداع سبق دفعه إلى المستودع البعيد بأمان
بمجرد تعديل إيداع سبق دفعه إلى origin، يتفرّع فرعك المحلي عن الفرع المتتبَّع (origin/<branch>): يصبح فرعك المحلي عند الإيداع C' بينما يظل origin عند C، وكلاهما يشترك في الإيداع الأب B.
إذا كان الفرع هو فرع الميزة أو طلب السحب الخاص بك وحدك، فحدّث الفرع البعيد بأمان عبر --force-with-lease (مع --force-if-includes في Git 2.30+):
# Safely replace the remote branch tip with your amended commit
git push --force-with-lease --force-if-includes origin HEAD- لماذا `--force-with-lease` بدلًا من `--force`: الأمر
git push --forceيستبدل الفرع البعيد بشكل أعمى ويمحو أي إيداعات دفعها زميل لك أو أداة CI منذ آخر جلب قمت به. أما--force-with-leaseفيتحقق من أنorigin/<branch>لا يزال يشير إلى نفس معرّف SHA المسجّل لديك؛ وإذا دفع شخص آخر إيداعًا في هذه الأثناء، يرفض Git الدفع لحماية عمله. - ما الذي يضيفه `--force-if-includes`: في حال تفعيل الجلب التلقائي في الخلفية، قد يتحدث المرجع المتتبَّع قبل أن تدفع. يتحقق
--force-if-includesمن أن الإيداع الموجود على قمة الفرع البعيد قد مَرّ فعلًا بسجلreflogالمحلي لديك قبل السماح بالاستبدال. - عند العمل على `main` أو فرع مشترك: لا تعدّل وتفرض الدفع على فرع مشترك يبني عليه مطورون آخرون عملهم. بدلًا من ذلك، اترك الإيداع كما هو وادفع إيداع إصلاح جديدًا، أو اعكسه بأمان عبر
git revert(راجع دليل التراجع عن إيداعات الدمج ودرس استعادة الأخطاء المدفوعة). - هل تحتاج إلى ربط الفرع المتتبَّع أولًا؟ راجع كيفية ضبط الفرع المتتبع (upstream) في Git.
6. ماذا لو كان الإيداع الذي تريد تعديله ليس آخر إيداع؟
الأمر git commit --amend يعدّل قمة الفرع (HEAD) فقط. عندما يكون الخطأ أو التعديل المنسي في HEAD~2 أو قبل ثلاثة إيداعات، لديك خياران نظيفان دون الحاجة إلى التخبئة والانتقاء اليدوي:
الخيار الأول: الدمج التلقائي السريع من الطرفية عبر git commit --fixup
جهّز التعديل، وأنشئ إيداع --fixup يشير إلى معرّف SHA للإيداع الأقدم (أو --fixup=amend:<sha> لتعديل رسالته أيضًا)، ثم نفّذ git rebase -i --autosquash:
# 1. Stage the changes meant for the older commit (e.g. a1b2c3d)
git add src/api/client.ts
# 2. Create a fixup commit targeting a1b2c3d
git commit --fixup=a1b2c3d
# 3. Autosquash the fixup commit straight into a1b2c3d
GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash a1b2c3d~1الخيار الثاني: إعادة التأسيس التفاعلية المرئية في GitTree
بدلًا من نسخ معرّفات SHA وتحرير ملفات rebase النصية في الطرفية، اقرأ دليل إعادة التأسيس التفاعلية بالواجهة الرسومية ودليل إعادة تأسيس الفروع. في مخطط إعادة التأسيس التفاعلية وإعادة الصياغة والضم والحذف داخل GitTree، انقر بزر الفأرة الأيمن على أي إيداع أقدم في المخطط، واختر Interactive Rebase from Here…، ثم غيّر إجراءه إلى Reword أو اسحب إيداع الإصلاح فوقه لتنفيذ Fixup/Squash بنقرة واحدة.

7. كيفية التراجع عن git commit --amend بعد تنفيذه بالخطأ
هل نفّذت git commit --amend بينما كانت هناك ملفات غير مقصودة في منطقة التجهيز، أو استبدلت رسالة إيداع كنت بحاجة إليها؟ لأن Git يسجّل كل حركة لمؤشر HEAD في سجل المراجع المحلي (reflog)، فإن إيداعك الأصلي قبل التعديل لا يزال محفوظًا بأمان عند HEAD@{1}.
# 1. Inspect the reflog to see the amend and the commit before it
git reflog -n 5
# e9f8d7c (HEAD -> feature) HEAD@{0}: commit (amend): feat: add billing webhook
# 4a3b2c1 HEAD@{1}: commit: feat: add billing webhook
# 2. Restore the branch to the pre-amend commit and keep any extra changes staged
git reset --soft HEAD@{1}استخدام git reset --soft HEAD@{1} يعيد مؤشر الفرع مباشرةً إلى الإيداع الأصلي (4a3b2c1) ويترك الفارق بين الإيداع المعدَّل والإيداع الأصلي مجهّزًا في الفهرس دون فقدان أي ملف في شجرة العمل. ولمعرفة الفروق الدقيقة بين أوضاع soft وmixed وhard واستعادة السجل، راجع شرح git reset --soft و--mixed و--hard، وكيفية التراجع عن git reset أو rebase أو commit، وكيفية استعادة التخبئات المحذوفة والإيداعات المعلّقة.
متى تستخدم git commit --amend مقابل reset أو revert أو rebase -i؟
استخدم جدول المقارنة التالي كلما أردت تصحيح السجل لتختار الأداة المناسبة لموقع الإيداع وحالة مشاركته مع الفريق:
| الأمر | الإيداع المستهدف | هل يغيّر معرّف SHA؟ | الاستخدام الأنسب |
|---|---|---|---|
git commit --amend | الإيداع الأخير (HEAD) فقط | نعم | عندما تريد تعديل رسالة آخر إيداع، أو ضمّ تغييرات مجهّزة منسية، أو تصحيح بيانات المؤلف على فرع محلي أو شخصي |
git reset --soft HEAD~1 | الإيداع الأخير (HEAD) | نعم | عندما تريد إلغاء الإيداع الأخير مع إبقاء جميع تغييراته مجهّزة لتقسيمها إلى إيداعين منفصلين أو أكثر |
git rebase -i <base> | أي إيداع ضمن النطاق المحدد | نعم | عندما تحتاج إلى تعديل أو إعادة صياغة أو ضمّ أو إعادة ترتيب أو حذف إيداع أقدم من HEAD قبل دمج طلب السحب |
git revert <sha> | أي إيداع (HEAD أو أقدم) | لا (يضيف إيداعًا عكسيًا جديدًا) | عندما يكون الإيداع قد وصل إلى main أو فرع مشترك يمنع الدفع القسري أو قد يربك عمل زملائك |
كيفية تعديل آخر إيداع في GitTree (خطوة بخطوة)
افتح عرض التغييرات وافحص الفروق المجهّزة
في GitTree على أنظمة macOS وWindows وLinux، افتح Changes من الشريط الجانبي. إذا أردت تعديل رسالة آخر إيداع فقط، فاترك قائمة Staged Changes فارغة؛ وإذا أردت إضافة ملف منسيّ أو أسطر بعينها، فجهّز تلك الملفات أو المقاطع أو الأسطر فقط من عرض الفروق جنبًا إلى جنب.
فعّل مفتاح Amend Previous Commit (1)
فعّل خيار Amend Previous Commit أعلى صندوق رسالة الإيداع (أو اضغط
Cmd+Shift+Mعلى macOS أوCtrl+Shift+Mعلى Windows وLinux). يملأ GitTree عنوان الإيداع ووصفه تلقائيًا منHEADعندما يكون الحقل فارغًا، وإذا كان الإيداع مدفوعًا مسبقًا إلى المستودع البعيد يعرض تنبيهًا واضحًا قبل إعادة كتابة السجل.عدّل الرسالة (أو صُغها بالذكاء الاصطناعي) وانقر Amend Commit (2)
حرّر العنوان أو الوصف—أو انقر زر الشرارة في GitTree Pro ليتولى Nour عبر أداة سطر الأوامر الخاصة بك (Claude Code أو Codex أو Gemini CLI) صياغة رسالة محدّثة من الفروق الكاملة للإيداع—ثم انقر Amend Commit.
تراجع بنقرة واحدة أو ادفع بأمان عبر Force Push (With Lease)
هل غيّرت رأيك؟ انقر Undo في شريط الأدوات العلوي (
Cmd+Z/Ctrl+Z) لاستعادة الإيداع الأصلي قبل التعديل من لقطة الأمان المحفوظة تحتrefs/ogt/trash، أو افحص الإيداع القديم في أي وقت من نافذة المفقودات (Lost & Found). وإذا كان الإيداع على فرعك البعيد، فاستخدم Force Push (With Lease)… من شريط الأدوات.


كيف يقضي GitTree على أخطاء git commit --amend الشائعة؟
تقع أغلب أخطاء التعديل في الطرفية لأن سطر الأوامر يخفي ثلاث معلومات حاسمة حتى يفوت الأوان: ما الموجود حاليًا في منطقة التجهيز، وهل دُفِع HEAD مسبقًا إلى origin، وما معرّف الإيداع السابق قبل استبداله. يعالج GitTree كل هذه المشكلات مباشرةً في الواجهة:
- فحص فوري للفروق المجهّزة وغير المجهّزة: قبل النقر على Amend Commit، تظهر قائمة Staged Changes مباشرةً فوق صندوق الرسالة حتى لا تضمّ ملفات غير مكتملة بالخطأ إلى
HEAD. ويمكنك تجهيز أو إلغاء تجهيز أسطر أو مقاطع أو ملفات منفردة بنقرة واحدة (تجهيز الملفات والمقاطع والأسطر). - اكتشاف الإيداعات المدفوعة والحماية عبر Force-Push-With-Lease: عندما يكون
HEADمدفوعًا مسبقًا إلى الفرع البعيد، ينبّهك GitTree داخل لوحة الإيداع *قبل* تنفيذ التعديل، ويربط سير العمل مع Force Push (With Lease)… لحماية إيداعات زملائك من الكتابة فوقها. - إعادة صياغة الرسالة بالنقر الأيمن وإنشاء `fixup!` / `amend!` سريعًا: هل تريد تعديل رسالة
HEADدون لمس ملفاتك المجهّزة؟ انقر بزر الفأرة الأيمن على أحدث إيداع في مخطط الإيداعات واختر Edit Commit Message…. وهل تريد إصلاح إيداع أقدم؟ انقر بزر الفأرة الأيمن عليه لإنشاء إيداعfixup!أوamend!أو فتح إعادة التأسيس التفاعلية. - لقطات أمان تلقائية (`refs/ogt/trash`) وتراجع بنقرة واحدة: قبل تنفيذ أي عملية من 19 عملية تغيّر السجل—بما فيها تعديل الإيداع، وإعادة التأسيس التفاعلية، وإعادة الضبط، وحذف الفروع، والتخلص من التغييرات—يسجّل GitTree لقطة أمان محلية تحت
refs/ogt/trash. النقر على Undo (Cmd+Z/Ctrl+Z) يعيد الإيداع الأصلي وحالة التجهيز فورًا. - نافذة المفقودات المرئية والطرفية المدمجة: حتى لو نفّذت التعديل من الطرفية المدمجة أو قبل أسابيع، تعرض أداة المفقودات (Lost & Found) الإيداعات المستبدلة والمعلّقة مع فروقها الكاملة لتستعيدها أو تنتقيها دون قراءة مخرجات
git reflogالخام. - تشغيل خطافات Git والتنبيه عن الأسرار ورسائل الذكاء الاصطناعي: يشغّل GitTree خطافات
pre-commitوcommit-msgفي مستودعك (خطافات Git)، ويفحص الفروق المجهّزة لرصد المفاتيح السرية، ويتيح في GitTree Pro للمساعد Nour كتابة رسائل إيداع دقيقة عبر وكيل البرمجة المحلي لديك.




الأسئلة الشائعة
هل يغيّر الأمر git commit --amend معرّف SHA الخاص بالإيداع؟
نعم. إيداعات Git غير قابلة للتغيير، لذا ينشئ git commit --amend كائن إيداع جديدًا بمعرّف SHA-1 (أو SHA-256) جديد يشترك في نفس الأب مع الإيداع الذي يستبدله، ثم ينقل مؤشر الفرع إلى الإيداع الجديد. ويبقى الإيداع المستبدل محفوظًا في سجل git reflog المحلي (HEAD@{1}) إلى أن تنتهي مهلة تنظيف الكائنات غير الموصولة.
كيف أعدّل آخر إيداع دون تغيير رسالته؟
جهّز تغييراتك الإضافية بالأمر git add <file> (أو git add -p)، ثم نفّذ git commit --amend --no-edit. يخبر الخيار --no-edit برنامج Git بإعادة استخدام رسالة الإيداع الحالية في HEAD دون فتح المحرر النصي. وفي GitTree، يؤدي تفعيل Amend Previous Commit إلى تعبئة عنوان الإيداع السابق ووصفه تلقائيًا لتنقر Amend Commit مباشرةً.
كيف أغيّر رسالة آخر إيداع فقط بينما لدي ملفات أخرى مجهّزة؟
نفّذ git commit --amend --only -m "New commit message" (أو git commit --amend -o). يوجّه الخيار --only برنامج Git لتعديل رسالة HEAD اعتمادًا على شجرة ملفات HEAD الحالية فقط، مع ترك ملفاتك المجهّزة في الفهرس للإيداع التالي. وفي GitTree، يمكنك أيضًا النقر بزر الفأرة الأيمن على أحدث إيداع في المخطط واختيار Edit Commit Message….
هل يمكنني تعديل إيداع بعد دفعه إلى GitHub أو GitLab أو Bitbucket؟
نعم، إذا كان الفرع خاصًا بك وحدك: عدّل الإيداع محليًا ثم نفّذ git push --force-with-lease --force-if-includes (أو استخدم Force Push (With Lease)… في GitTree) ليحدّث Git الفرع البعيد فقط إذا لم يدفع شخص آخر إيداعات جديدة. لا تنفّذ git pull بعد تعديل إيداع مدفوع، وتجنّب تعديل الإيداعات على الفروع المشتركة مثل main واستخدم git revert هناك بدلًا من ذلك.
كيف أزيل ملفًا من آخر إيداع دون حذفه من جهازي؟
إذا كان الملف قد أُضيف لأول مرة في الإيداع الأخير، فنفّذ git rm --cached <file> متبوعًا بـ git commit --amend --no-edit. أما إذا كان الملف موجودًا مسبقًا في HEAD~1 وتريد فقط إلغاء التعديلات التي جرت عليه في HEAD، فنفّذ git restore --source=HEAD~1 --staged <file> ثم git commit --amend --no-edit. كلا الأمرين يبقيان الملف سليمًا في مجلد مشروعك.
كيف أتراجع عن git commit --amend إذا أخطأت؟
نفّذ git reset --soft HEAD@{1} في الطرفية؛ سيعود مؤشر الفرع إلى الإيداع الذي كان HEAD يشير إليه مباشرةً قبل التعديل مع بقاء التغييرات المضافة مجهّزة. وفي GitTree، يكفي النقر على Undo في شريط الأدوات (Cmd+Z على macOS أو Ctrl+Z على Windows وLinux) أو فتح Lost & Found لاستعادة الإيداع الأصلي.
هل يشغّل git commit --amend خطافات pre-commit وcommit-msg ويحافظ على توقيع GPG/SSH؟
نعم، يشغّل git commit --amend خطافَي pre-commit وcommit-msg تمامًا كأي إيداع عادي (ويمكنك تمرير --no-verify أو -n لتخطّيهما عند الحاجة). ولأن التعديل ينشئ كائن إيداع جديدًا، يُستبدل التوقيع السابق؛ فإذا كان تفعيل commit.gpgsign مضبوطًا في Git أو في GitTree ضمن التفضيلات › توقيع الإيداعات، يعيد Git توقيع الإيداع المعدَّل تلقائيًا.
كيف أعدّل إيداعًا يقع قبل إيداعين أو ثلاثة في السجل؟
الأمر git commit --amend يعدّل HEAD فقط. لتعديل إيداع أقدم من الطرفية، جهّز إصلاحك، ونفّذ git commit --fixup=<sha> (أو --fixup=amend:<sha>)، ثم نفّذ git rebase -i --autosquash <sha>~1. وفي GitTree، انقر بزر الفأرة الأيمن على الإيداع الأقدم في المخطط واختر Interactive Rebase from Here… لإعادة صياغته أو تعديله أو ضمّه بصريًا.
المصادر
تحققنا من المعلومات عن المنتجات الأخرى من صفحاتها الرسمية بتاريخ 11 نوفمبر 2026. الأسعار والميزات تتغير، وصفحات الشركات هي المرجع.
- توثيق Git الرسمي — git-commit (--amend و--no-edit و--only و--reset-author)
- كتاب Pro Git — 7.6 أدوات Git: إعادة كتابة السجل (تعديل الإيداع الأخير)
- توثيق Git الرسمي — git-push (--force-with-lease و--force-if-includes)
- توثيق Git الرسمي — git-restore (--source و--staged)
- توثيق Git الرسمي — git-reflog (استعادة الإيداعات قبل التعديل)