git format-patch

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

تحويل الـ commits إلى ملفات patch جاهزة للبريد


يكتب الأمر 'git format-patch' كل commit في نطاق إلى ملف .patch مرقّم خاص به: المؤلف والتاريخ ورسالة الـ commit كعنوان ونص للبريد وملخّص التغييرات والـ diff. المشاريع التي تراجع عبر القوائم البريدية (مثل Git نفسه ونواة Linux) تستقبل المساهمات هكذا، ويعيد git am الملفات إلى commits.

الصيغة

git format-patch [-o <dir>] [--stdout] [-<n>] [<since> | <revision-range>]
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

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

مبتدئ (2)

كتابة ملفات الـ patch في هذا المجلد.

موصى بهإبعاد ملفات الـ patch عن جذر المشروع

مثال

git format-patch -1 -o patches

طباعة كل الـ patches في الطرفية بدل كتابة ملفات.

عند الحاجةإرسال الـ patches إلى برنامج آخر أو ملف واحد

مثال

git format-patch --stdout main > series.mbox

متوسط (1)

كتابة 0000-cover-letter.patch أيضًا، رسالة تقديم للسلسلة.

عند الحاجةتقديم سلسلة من عدة patches

مثال

git format-patch --cover-letter main

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

طرق تسليم الـ commits

مع الإبقاء على المؤلف والرسالة

الأمريحفظ التأليف
git diff > change.diffNo
git format-patch + git amنعم
git bundleنعم (commits وفروع كاملة)

أمثلة

الـ commits منذ main

git format-patch main

ملف لكل commit غير موجود في main.


آخر commit

git format-patch -1

أحدث commit فقط.


في مجلد

git format-patch main -o patches

اكتب الملفات في patches/.


مع رسالة تقديم

git format-patch --cover-letter main

إضافة رسالة تمهيدية 0000.

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

1
git format-patch main -o outgoing

ملف لكل commit

2
git send-email outgoing/*.patch

إرسالها إلى القائمة

حل المشكلات

لم يُنشأ أي ملف patch

السبب: النطاق فارغ (مثلًا لا commits في فرعك بعد main)

تحقّق بـ git log --oneline main..HEAD

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

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

  • ✓نفّذ rebase على أحدث main قبل إنشاء الـ patches.
  • ✓تغيير منطقي واحد لكل commit — كل واحد يصبح رسالة بريد.

أخطاء متكررة

  • ✗إرسال git diff بدل format-patch — يضيع في الـ diff المؤلف والتاريخ والرسالة.
  • ✗نسيان النطاق وعدم الحصول على شيء: يحتاج format-patch نقطة بداية (main، ‏-1…).

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

A:

نعم، لكن git apply يغيّر الملفات فقط؛ أما git am فينشئ الـ commit بالمؤلف والرسالة الأصليين أيضًا.