في هذا المثال، لدينا مستودع بفرع رئيسي main يحتوي ملف أساس fichier1.txt وأول إيداع أولي. انطلاقاً من main، ننشئ فرعين، branche1 و branche2، كل منهما مخصَّص لاختبار rebase و merge على التوالي. ثم يُنشأ فرعا عمل إضافيان، branche-rebase من branche1 و branche-merge من branche2، لإضافة تعديلات عليهما.
يبدأ المشروع بمستودع يحتوي إيداعاً واحداً على main، يقابل إنشاء الملف fichier1.txt:
(main)
A # Commit initial avec fichier1.txtفي الإيداع A، أضفنا الملف fichier1.txt بمحتوى أولي.
ثم يُنشأ فرعان جديدان من main:
branche1: مخصَّص لاستقبال branche-rebase لاختبار git rebase.branche2: مخصَّص لاستقبال branche-merge لاختبار git merge.في كل فرع عمل (branche-rebase و branche-merge)، نجري ثلاثة إيداعات منفصلة. إليك الإيداعات بالتفصيل لكل فرع:
(main)
A
(branche-rebase)
\
D---E---F # Commits ajoutés sur branche-rebase
(branche-merge)
\
G---H---I # Commits ajoutés sur branche-mergeالإيداعات على branche-rebase:
fichier-2-rebase.txt بالمحتوى الأولي "Modification 1 dans branche-rebase".fichier-2-rebase.txt.fichier-2-rebase.txt.الإيداعات على branche-merge:
fichier-2-merge.txt بالمحتوى الأولي "Modification 1 dans branche-merge".fichier-2-merge.txt.fichier-2-merge.txt.تضيف هذه الإيداعات محتوى مطابقاً، لكن في ملفات مختلفة (fichier-2-rebase.txt و fichier-2-merge.txt)، للسماح بمقارنة واضحة بين merge و rebase.
branche-merge في branche2 بـ git mergeلدمج تعديلات branche-merge في branche2، نستخدم الأمر git merge على branche2. تنشئ هذه العملية إيداع دمج يحفظ سجلاً كاملاً ويتضمّن إيداعات فرع العمل دون إعادة ترتيبها.
السجل بعد merge:
(branche2)
A-------J # J est le commit de fusion
\ |
\ |
G---H---I # branche-merge conserve son historique distinctbranche2 مع تعديلات branche-merge (G، H، I) دون نقلها أو تغيير ترتيبها.git merge، يُظهر السجل «نقطة التقاء» تشير بصرياً إلى مكان دمج branche-merge في branche2. يحفظ ذلك سجلاً كاملاً ومميّزاً لكل فرع، وهو غالباً مفيد في المشاريع التعاونية.branche-rebase في branche1 بـ git rebaseلدمج تعديلات branche-rebase في branche1، نستخدم الأمر git rebase. بخلاف merge، تعيد إعادة الأساس تموضع الإيداعات (D، E، F) لـ branche-rebase كأنها أُنشئت بعد آخر إيداع في branche1 (A).
السجل بعد rebase:
(branche1)
A---D'---E'---F' # Commits de branche-rebase réappliqués en fin de branche1branche-rebase مطبَّقة خطّياً بعد A على branche1.git rebase، تُعاد تنظيم إيداعات branche-rebase لتشكيل سجل خطّي بلا «نقطة التقاء»، كأنها أُضيفت مباشرة بعد الإيداع الأولي A. يبسّط ذلك السجل ويجعله أنظف، لكنه قد يخفي مسار فروع العمل الأولية.الفروقات المرصودة في سجلات Git تسمح بفهم أفضل للاستخدامات الخاصة لـ merge و rebase.
git merge:
git rebase:
| الأمر | السجل | حالة الاستخدام المثالية |
|---|---|---|
git merge | سجل كامل مع نقطة التقاء | مشاريع تعاونية بعدة فروع |
git rebase | سجل خطّي بلا نقاط التقاء | تنظيف السجل قبل دمج مشترك |
باختصار:
git merge -> Historique complet avec commit de fusion
git rebase -> Historique linéaire sans commit de fusionيسمح لك هذا الدليل بفهم الفروقات بين git merge و git rebase وتصوّرها، واختيار الطريقة الأنسب حسب سياق مشروعك.