تخطَّ إلى المحتوى

🔀 شرح Git

الجديد في Git (نسخة 2.55)

الدرس 33 من 33· ⏱ 3 دقائق قراءة· 🗓 آخر تحديث: ٢٧ يوليو ٢٠٢٦

لماذا هذا الدرس؟

Git يصدر نسخة جديدة كل بضعة أسابيع، وأغلبها تحسينات داخلية لا تغيّر شيئًا في يومياتك. لكن نسخة 2.55 (صدرت نهاية يونيو 2026) فيها عدّة إضافات عملية تستحق معرفتها. لا تحتاج تحديث Git فورًا لتفهم هذا الدرس — فقط اعرف أين تستخدم هذه الأدوات لو حدّثت لاحقًا.

دفع لعدّة مستودعات بعيدة دفعة واحدة

لو مشروعك يُدفع لأكثر من مستودع بعيد (مثلًا origin على GitHub ونسخة احتياطية على GitLab)، كنت تحتاج push منفصل لكل واحد. من 2.55، عرّف مجموعة remotes في الإعدادات:

# .git/config
[remotes]
    all = origin backup
git push all main

يدفع Git الفرع نفسه إلى origin ثم backup بالتتابع، بنفس الخيارات في كل مرّة. هذا امتداد لميزة مجموعات remotes الموجودة أصلًا مع git remote update (راجع درس المستودعات البعيدة بعمق) — والجديد أن push صار يقبلها أيضًا.

⚠️ خيار --atomic غير مدعوم مع مجموعات remotes — الذرّية مضمونة فقط ضمن اتصال واحد لمستودع واحد، فقد ينجح الدفع لبعض أعضاء المجموعة ويفشل لغيرها.

تحديد عرض الرسم البياني: --graph-lane-limit

في مستودع قديم فيه عشرات الفروع النشطة، git log --graph يمكن أن يمتدّ أفقيًا لدرجة يصعب معها القراءة. الخيار الجديد يحدّ عدد الممرّات المعروضة:

git log --oneline --graph --all --graph-lane-limit=4

الفروع المتوازية الزائدة عن العدد المطلوب تُستبدل برمز ~ بدل تمديد كل سطر أفقيًا — عرض أنظف داخل طرفية بعرض محدود.

آخر إضافة لـ git log: --max-count-oldest

عادةً git log وrev-list يعرضان الأحدث أولًا. الخيار الجديد يقلب هذا:

git log --oneline --max-count-oldest=5 v1.0.0..main

يعرض أول 5 commits بعد v1.0.0 مباشرة، لا آخر 5 — مفيد عند فحص أول ما تغيّر بعد نقطة معيّنة (وسم إصدار مثلًا) دون عكس النتيجة يدويًا.

خطافات تعمل بالتوازي

نظام الخطافات الأحدث المبني على git config (وليس ملفات .git/hooks/ الكلاسيكية من درس Git Hooks) صار يدعم تشغيل عدّة خطافات لنفس الحدث بالتوازي:

# .git/config
[hook "lint"]
    command = ./scripts/lint.sh
    parallel = true
[hook "typecheck"]
    command = ./scripts/typecheck.sh
    parallel = true
[hook]
    jobs = 4

مع parallel = true على كل خطاف وhook.jobs بعدد أكبر من 1، تعمل الخطافات المؤهّلة معًا بدل التسلسل — تسريع ملموس لفحوصات pre-push مثلًا.

💡 خطافات تتعامل مع بيانات مشتركة — مثل pre-commit وcommit-msg وprepare-commit-msg — تبقى تعمل تسلسليًا دائمًا مهما ضبطت الإعداد، حماية من التعارض.

أمر تجريبي: git history fixup

في درس Interactive Rebase تعلّمت commit --fixup مع rebase -i --autosquash لدمج تعديل في commit سابق. الأمر التجريبي الجديد يفعل هذا في خطوة واحدة:

git add fixed-file.js
git history fixup a3f5c21

يطبّق التعديلات المجهّزة حاليًا مباشرة على الـ commit المحدَّد عبر دمج ثلاثي (three-way merge) بين HEAD وذلك الـ commit وشجرة التعديلات — دون فتح قائمة rebase تفاعلية. أي فرع آخر متفرّع من نفس الـ commit الأصلي يُحدَّث تلقائيًا ليشير للنسخة المعاد كتابتها.

خيارات مفيدة: --dry-run لمعاينة النتيجة قبل التنفيذ، و--reedit-message لتعديل رسالة الـ commit الهدف بدل الإبقاء عليها كما هي.

⚠️ الأمر لا يزال معلَّمًا رسميًا "EXPERIMENTAL" وقد يتغيّر سلوكه — تعامل معه بنفس حذر أي إعادة كتابة تاريخ، خصوصًا على فروع مشتركة.

تحسين بسيط: git checkout -m أصبح أأمن

git checkout -m فرع يحاول دمج تعديلاتك المحلّية مع الفرع الهدف عند التبديل. سابقًا، لو نتج تعارض، كانت لديك فرصة واحدة فقط لحلّه فورًا. من 2.55:

git checkout -m other-branch
# عند تعارض: تُحفظ تعديلاتك تلقائيًا كـ stash

تقدر تحلّ التعارض فورًا وتحذف الـ stash بـ git stash drop، أو تؤجّل الأمر بـ git reset --hard وتسترجع تعديلاتك لاحقًا بـ git stash pop.

هل تحتاج التحديث فورًا؟

لا. Git أداة مستقرة جدًا، وهذه إضافات فوق الأساس الموجود، لا كسر لأي أمر قديم تعرفه. تحقّق من نسختك الحالية بـ:

git --version

ولو أردت التحديث، راجع درس التثبيت والإعداد.

🎯 اختبر نفسك في اختبار Git أو انتقل إلى مسار Docker.

شرح الجديد في Git (نسخة 2.55) — Git بالعربي
الجديد في Git (نسخة 2.55)Git بالعربي · The Code Fix

📚 لمزيد من التعمّق في Git، راجِع التوثيق الرسمي لـ Git.

هل كان هذا الدرس مفيدًا؟