انتقل إلى محتوى الدرس
الدرس 24
دورة Version Control

إعادة تأسيس الفروع وتنظيم السجل عبر الأمر git rebaseGit Rebase

أعد تطبيق التزامات فرعك فوق أحدث التزام في main للحصول على سجل خطي نظيف عبر git rebase، ونظّم التزاماتك بـ rebase -i مع الالتزام بالقاعدة الذهبية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يوفر نظام Git طريقتين رئيسيتين لتكامل الفروع: الأمر git merge والأمر git rebase (إعادة تأسيس قاعدة الفرع). فبينما يربط الدمج قمتي الفرعين بالتزام دمج، يقوم git rebase بأخذ الالتزامات الخاصة بفرع الميزة وإعادة تطبيقها واحداً تلو الآخر فوق أحدث التزام وصل إليه الفرع الأساسي.

انتبه لاتجاه التنفيذ: لإعادة تأسيس الفرع feat-ui فوق قمة main، ننتقل أولاً إلى فرع الميزة عبر git switch feat-ui ثم ننفذ git rebase main. ولأن كل التزام مُعاد تطبيقه يحصل على التزام والد جديد، يمنحه Git بصمة SHA-1 جديدة تماماً.

Shell
# Switch to your feature branch and rebase onto main
git switch feat-ui
git rebase main

# Fast-forward main cleanly after rebasing
git switch main
git merge feat-ui

لماذا تفضل كثير من الفرق الهندسية إعادة تأسيس فروع الميزات فوق main قبل دمجها؟

  • سجل تاريخي خطي ونظيف: بدلاً من تشابك الخطوط وعقد الدمج المتداخلة في مخرجات git log --graph، يظهر تاريخ المشروع كخط زمني مستقيم يسهل تتبعه وفحصه.
  • تمكين الدمج السريع المباشر: بمجرد إعادة تأسيس feat-ui فوق قمة main، يصبح الانتقال إلى main وتشغيل git merge feat-ui دمجاً سريعاً (Fast-Forward) سلساً بلا عقد إضافية.
Shell
# Inspect the clean single-line commit graph after rebase
git log --oneline --graph --decorate -n 5

أثناء تطوير ميزة محلياً، قد تسجل عدة التزامات سريعة مثل «تجربة» أو «تصحيح خطأ إملائي». وقبل تسليم فرعك، يتيح لك الوضع التفاعلي (git rebase -i HEAD~3) تهذيب آخر التزاماتك المحلية وتنظيمها عبر الأوامر التالية داخل المحرر:

  • الأمر pick: الإبقاء على الالتزام كما هو دون تغيير.
  • الأمر reword: الاحتفاظ بتعديلات الالتزام مع فتح المحرر لتعديل رسالته فقط.
  • الأمر squash: دمج تعديلات الالتزام مع الالتزام الذي يسبقه ودمج رسالتيهما معاً.
  • الأمر fixup: دمج تعديلات الالتزام في الالتزام السابق له مع تجاهل رسالته المؤقتة تلقائياً.
  • الأمر drop: حذف الالتزام وإسقاطه من السجل.
Shell
# Open interactive rebase for the last 3 local commits
git rebase -i HEAD~3

# Verify the squashed clean commit in log
git log --oneline -n 3
مخطط يوضح نقل قاعدة الفرع فوق قمة main عبر git rebase والتنظيم التفاعلي للالتزامات بالخيار -i

نظراً لأن git rebase يعيد تطبيق التزاماتك واحداً تلو الآخر، فقد يتوقف مؤقتاً عند أحد الالتزامات إذا صادف تعارضاً في الأسطر. ويتم التعامل معه بالخطوات التالية:

  1. حرّر الملف المتعارض واحذف جميع علامات التعارض الثلاث بالكامل.
  2. جهّز الملف المحسوم عبر الأمر git add <file>.
  3. شغّل الأمر git rebase --continue (ولا تشغّل git commit يدوياً) ليكمل Git تطبيق الالتزام الحالي وينتقل للتالي.

وإذا أردت في أي لحظة إلغاء إعادة التأسيس بالكامل واسترجاع حالة الفرع الأصلية قبل البدء، نفّذ الأمر git rebase --abort.

Shell
# Stage resolved file and continue replaying commits
git add app.html
git rebase --continue

# Or cancel the entire rebase back to original state
git rebase --abort

تُعد القاعدة الذهبية لإعادة التأسيس (Golden Rule of Rebasing) أهم قاعدة أمان في هندسة Git: لا تستخدم git rebase أبداً على التزامات عامة مشتركة يعمل عليها مطورون آخرون (مثل الفرع الرئيسي المشترك main).

بما أن git rebase يستبدل الالتزامات القديمة بكائنات التزام جديدة تحمل بصمات SHA-1 مختلفة، فإن إعادة كتابة سجل مشترك تتسبب في تضارب السجلات وتكرار الالتزامات لدى بقية أعضاء الفريق. استخدم git rebase فقط لتحديث وتهذيب التزامات فرعك المحلي الخاص قبل دمجها.

Shell
# Inspect reflog or ORIG_HEAD if you need to undo a rebase
git reflog -n 4
git reset --hard ORIG_HEAD

يلخص الجدول المقارن التالي الفروق الجوهرية بين الدمج القياسي git merge وإعادة التأسيس git rebase لاختيار الأداة الأنسب لكل موقف:

وجه المقارنةالأمر git mergeالأمر git rebase
شكل سجل الالتزاماتيحفظ الشكل الحقيقي للتفرع والدمج الزمنيينشئ سجلاً خطياً مستقيماً يسهل قراءته
بصمات الالتزامات SHA-1لا يغير بصمات الالتزامات الموجودة أبداًينشئ التزامات جديدة ببصمات SHA-1 جديدة
التزام الدمج الإضافيينشئ التزام دمج بوالدين عند تفرع المساراتلا ينشئ أي التزام دمج إضافي
الأمان على الفروع المشتركةآمن بنسبة 100% على السجلات المشتركةممنوع على السجلات المشتركة (القاعدة الذهبية)
تهذيب الالتزاماتيبقي جميع الالتزامات التجريبية كما هييتيح دمج وتهذيب الالتزامات عبر rebase -i
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس آلية عمل git rebase لبناء سجل التزامات خطي، وتنظيم الالتزامات المحلية تفاعلياً عبر rebase -i، ومتابعة أو إلغاء التأسيس بـ --continue و--abort، والالتزام بالقاعدة الذهبية بعدم إعادة كتابة التاريخ المشترك. الخطوة التالية: انتقل الآن إلى الدرس رقم 25 «ربط وإدارة المستودعات البعيدة عبر الأمر git remote» لبدء الوحدة السادسة وربط مستودعك المحلي بالسحابة.

مشاركة

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

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Rebase إعادة التأسيس (Rebase)
نقل سلسلة التزامات فرع لتبدأ من قمة التزام أساسي أحدث عبر إعادة تطبيقها واحداً تلو الآخر ببصمات جديدة.
للمراجعة
02 Interactive Rebase إعادة التأسيس التفاعلية
تشغيل git rebase -i لفتح قائمة الالتزامات المحلية وتعديل رسائلها أو دمجها أو حذف غير اللازم منها.
للمراجعة
03 Squashing دمج وتكثيف الالتزامات
جمع عدة التزامات فرعية صغيرة في التزام واحد متكامل ونظيف باستخدام الأمر squash أو fixup.
للمراجعة
04 Cherry-Pick انتقاء الالتزام (Cherry-Pick)
نسخ تعديلات التزام واحد محدد من فرع آخر وتطبيقه كالتزام جديد فوق الفرع النشط الحالي.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 ORIG_HEAD ORIG_HEAD
Original HEAD Backup Pointer
مؤشر أمان يحفظ فيه Git بصمة قمة الفرع الأصلية تلقائياً قبل تنفيذ إعادة التأسيس أو الضبط.
للمراجعة
02 SHA-1 SHA-1
Secure Hash Algorithm 1
البصمة الرقمية للالتزام التي تتغير تلقائياً عند إعادة تأسيس الالتزام فوق والد جديد.
للمراجعة
03 WIP WIP
Work In Progress
الالتزامات التجريبية الصغيرة أثناء العمل التي يتم دمجها وتهذيبها عبر التأسيس التفاعلي.
للمراجعة
04 DAG DAG
Directed Acyclic Graph
الرسم البياني للالتزامات الذي يحوله الأمر git rebase من مسارات متفرعة إلى سلسلة خطية مستقيمة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. انتقل إلى الفرع feat-ui عبر git switch feat-ui، ونفّذ git rebase main، ثم انتقل إلى main وادمج الفرع دمجاً سريعاً.

  2. شغّل الأمر git rebase -i HEAD~3 على فرع محلي لدمج التزام إصلاح إملائي في الالتزام السابق له، وتأكد من النتيجة عبر git log --oneline -n 3.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

كيف يختلف أسلوب الأمر git rebase في تكامل الفروع عن الأمر git merge؟

يعيد الأمر git rebase تطبيق التزامات الفرع الحالي واحداً تلو الآخر فوق قمة الفرع الأساسي لإنتاج سجل خطي.

02

عندما يعيد الأمر git rebase تطبيق التزاماتك فوق قاعدة جديدة، تحتفظ الالتزامات بنفس بصمات SHA-1 القديمة دون تغيير.

خطأ؛ لأن تغير الالتزام الوالد ينتج كائنات التزام جديدة تماماً تحمل بصمات SHA-1 جديدة.

03

ما هي القاعدة الذهبية لاستخدام الأمر git rebase بأمان؟

عدم استخدام git rebase أبداً على الالتزامات والفروع المشتركة مع مطورين آخرين.

04

أي صيغة تفتح المحرر التفاعلي لدمج أو تعديل رسائل أو إعادة ترتيب آخر 3 التزامات محلية؟

يفتح الأمر git rebase -i HEAD~3 شاشة التأسيس التفاعلي لآخر ثلاثة التزامات محلية.

05

في قائمة git rebase -i التفاعلية، أي أمر يدمج الالتزام في الالتزام الذي يعلوه مع تجاهل رسالته المؤقتة تلقائياً؟

يدمج الأمر fixup التعديلات في الالتزام السابق ويحتفظ برسالة الالتزام السابق فقط دون فتح محرر الرسائل.

06

بعد تحرير الملف المتعارض أثناء عملية rebase وتجهيزه بالأمر git add، أي أمر يستأنف عملية إعادة التأسيس؟

يستأنف الأمر git rebase --continue تطبيق الالتزامات المتبقية.

07

أي أمر يلغي عملية إعادة التأسيس الجارية ويعيد الفرع فوراً إلى حالته الأصلية قبل البدء؟

يلغي الأمر git rebase --abort العملية ويعيد الفرع إلى وضعه الأصلي بالكامل.

08

في محرر التأسيس التفاعلي git rebase -i، تُرتب الالتزامات من الأقدم في الأعلى إلى الأحدث في الأسفل.

صواب؛ تُعرض الالتزامات حسب ترتيب إعادة تطبيقها من الأقدم في السطر الأول إلى الأحدث في الأسفل.

09

أي أمر في Git ينسخ التزاماً واحداً محدداً فقط من فرع آخر ويطبقه على فرعك النشط الحالي؟

ينسخ الأمر git cherry-pick <commit-hash> تعديلات التزام واحد محدد ويطبقه فوق الفرع الحالي.

10

ما المؤشر الخاص الذي يحفظ قمة الفرع الأصلية قبل عملية التأسيس ويتيح التراجع عنها بعد اكتمالها؟

يحفظ المؤشر ORIG_HEAD موقع الفرع الأصلي قبل تنفيذ عمليات مثل rebase أو reset.