git history fixup
دمج تعديل في commit سابق مباشرة (تجريبي) git history fixup
أمر تجريبي جديد في Git 2.55 يطبّق التعديلات المجهّزة حاليًا مباشرة على commit سابق محدَّد، كبديل أسرع من commit --fixup مع rebase --autosquash.
بدل تجهيز commit بعلامة --fixup ثم تشغيل rebase -i --autosquash لدمجه، git history fixup <commit> يدمج التعديلات المجهّزة حاليًا مباشرة داخل الـ commit المحدَّد عبر دمج ثلاثي (three-way merge) بين HEAD وذلك الـ commit وشجرة التعديلات المجهّزة، مع الحفاظ على رسالة الـ commit وصاحبه كما هما إلا لو استُخدم --reedit-message. أي فرع آخر يتفرّع من نفس الـ commit الأصلي يُحدَّث تلقائيًا للإشارة إلى النسخة المعاد كتابتها. الأمر لا يزال معلَّمًا رسميًا EXPERIMENTAL وقد يتغيّر سلوكه لاحقًا.
الصياغة
git history fixup <commit> [--dry-run] [--reedit-message] [--update-refs=(branches|head)] [--empty=(drop|keep|abort)]
📄 مثال
git add fixed-file.js git history fixup a3f5c21 # يدمج التعديل المجهّز داخل الـ commit مباشرة git history fixup a3f5c21 --dry-run # معاينة النتيجة دون تنفيذها فعليًا
أهم الخيارات
| الخيار | الوظيفة |
|---|---|
| --dry-run | يعرض ما سيحدث دون تنفيذ أي تغيير فعلي |
| --reedit-message | يفتح محرّر النصوص لتعديل رسالة الـ commit الهدف بدل الإبقاء عليها كما هي |
| --update-refs | يتحكّم بتحديث الفروع أو HEAD المتفرّعة من الـ commit الأصلي بعد إعادة الكتابة |
💡 نصائح عملية
- أسرع من commit --fixup + rebase --autosquash لتصحيح commit واحد بعيد في التاريخ دون فتح قائمة rebase كاملة
⚠️ أخطاء شائعة
- استخدامه على commit مدفوع بالفعل ومُشارَك مع الفريق دون تنسيق — هو إعادة كتابة تاريخ فعلية تمامًا مثل rebase
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار GIT الكامل بالعربي.