git am

الـ patches وإعادة الكتابة

تطبيق patches من ملفات البريد كـ commits


يأخذ الأمر 'git am' ‏(apply mailbox) ملفات الـ patch التي أنشأها git format-patch ويحوّل كلًّا منها إلى commit، مع الإبقاء على المؤلف والتاريخ والرسالة الأصلية. إنه الطرف المستقبِل للمساهمات عبر البريد. إذا لم يعد الـ patch ينطبق يتوقف git am؛ أصلحه ثم شغّل git am --continue، أو تراجع بـ git am --abort.

الصيغة

git am [--signoff] [--3way] [<mbox> | <patch-file>...]
git am (--continue | --skip | --abort)
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

انقر على أي خيار لتوسيعه

مبتدئ (1)

إضافة سطر Signed-off-by باسمك إلى كل commit.

عند الحاجةمشاريع تتطلب سلسلة توقيعات

مثال

git am -s 0001-fix.patch

متوسط (1)

إذا لم ينطبق الـ patch بشكل نظيف، يلجأ إلى دمج ثلاثي (قد يترك تعارضات).

موصى بهتطبيق patches صُنعت على أساس أقدم قليلًا

مثال

git am -3 0001-fix.patch

اختيار الخيار المناسب

تطبيق الـ patches

ملفات أم commits؟

الأمرينشئ commit
git apply fix.patchلا — الملفات فقط
git am fix.patchنعم — بالمؤلف الأصلي

أمثلة

تطبيق الـ patches

git am 0001-*.patch

يصبح كل ملف commit.


إضافة توقيعك

git am -s 0001-fix.patch

يضيف Signed-off-by باسمك.


إيقاف تطبيق فاشل

git am --abort

يعود كل شيء كما كان.

أمثلة على سير العمل

1
git switch -c review main

فرع لاختبارها

2
git am ~/patches/*.patch

تطبيقها

3
git log --oneline main..

التحقق مما وصل

حل المشكلات

error: patch failed … patch does not apply

السبب: ملفاتك تختلف عن سياق الـ patch

git am --abort، ثم أعد المحاولة بـ --3way، أو اطلب patch بعد rebase

نصائح وأخطاء شائعة

أفضل الممارسات

  • ✓طبّق الـ patches على فرع جديد، لا مباشرة على main.

أخطاء متكررة

  • ✗استخدام git apply وأنت تريد commits — ‏apply يغيّر الملفات فقط.
  • ✗ترك git am فاشل نصف منتهٍ: أنهِه بـ --continue أو --abort.

الأسئلة الشائعة

A:

تعني «apply mailbox»: يقرأ الـ patches بصيغة البريد (mbox).