Skip to content

الوحدة الثالثة: الفروع والدمج بالتفصيل

الفروع (Branches) هي "القوة الخارقة" في Git. فهي تسمح للفرق الاحترافية بالتجربة، وبناء الميزات، وإصلاح الأخطاء بالتوازي دون التأثير أبداً على الكود "الجاهز للنشر".

1. فلسفة التفرع (Branching)

فكر في تاريخ Git كشجرة. فرع main هو الجذع الرئيسي. في كل مرة تبدأ فيها مهمة جديدة، تقوم بإنبات فرع صغير بعيداً عن هذا الجذع.

  • لماذا؟ إذا ارتكبت خطأً في فرعك، يظل الجذع (main) آمناً ومستقراً.
  • أفضل ممارسة: لا تقم أبداً بكتابة الكود مباشرة على فرع main. قم دائماً بإنشاء فرع مخصص لميزتك (Feature branch).

التعامل مع الفروع كالمحترفين

إنشاء فرع جديد والانتقال إليه

bash
git switch -c feature/login-system

هذا:

  • ينشئ فرعًا جديدًا.
  • ينقلك إليه فورًا.

--

عرض الفروع

bash
git branch

عرض جميع الفروع المحلية:

bash
git branch -a

الانتقال بين الفروع

bash
git switch main

حذف فرع بعد الانتهاء

bash
git branch -d feature/login-system

إذا رفض Git بسبب عدم الدمج:

bash
git branch -D feature/login-system

لا تستخدم -D إلا إذا كنت متأكدًا أنك لا تحتاج التاريخ.


2. دمج الفروع (Merge)

بعد الانتهاء من العمل في فرع feature، يجب دمجه في main.

الطريقة الموصى بها

bash
git switch main
git merge --no-ff feature/login-system

لماذا --no-ff؟

لأنه:

  • يمنع الدمج السريع (Fast-forward).
  • ينشئ Merge Commit واضح.
  • يحافظ على شكل الشجرة مثل Pull Request في GitHub.

بعد الدمج:

bash
git push

3. استرجاع التغييرات: الدمج (Merge) مقابل إعادة التأسيس (Rebase)

هذا سؤال شائع في المقابلات الوظيفية وخيار يومي للمطورين.

أ. الدمج (git merge)

  • كيف: يأخذ التاريخين المختلفين ويربطهما معاً عن طريق "Commit دمج" (Merge Commit) جديد.
  • لماذا: يحافظ على الجدول الزمني التاريخي الدقيق لما حدث ومتى حدث.
  • متى: استخدمه عندما تريد دمج ميزة مكتملة في فرع main.

ب. إعادة التأسيس (git rebase)

  • كيف: يقوم بـ "رفع" التزاماتك (commits) ووضعها فوق آخر التزامات موجودة في فرع main. يعيد كتابة التاريخ ليجعله يبدو كخط مستقيم.
  • لماذا: ينتج عنه تاريخ مشروع أنظف بكثير وخط سير واضح (Linear history).
  • متى: استخدمه لتحديث فرعك الخاص بآخر التغييرات من فرع main قبل أن تفتح "طلب سحب" (Pull Request).

WARNING

القاعدة الذهبية لإعادة التأسيس (Rebase): لا تقم أبداً بعمل rebase للفروع التي تم رفعها ومشاركتها مع الآخرين على GitHub. سيؤدي ذلك إلى فوضى عارمة لزملائك!


4. حل التعارضات (بالطريقة الاحترافية)

يحدث التعارض عندما لا يعرف Git أي نسخة من سطر معين يجب أن يعتمدها. يحدث هذا عادة أثناء عملية الدمج (merge) أو إعادة التأسيس (rebase).

الخطوة 1: تحديد مكان المشكلة

سيقوم Git بتحديد الملفات المتعارضة. افتحها في محرر الكود (برنامج VS Code يسهل هذا جداً بتقديم أزرار مثل "Accept Current" أو "Accept Incoming").

الخطوة 2: فهم المنطق

text
<<<<<<< HEAD (Current Branch - فرعك الحالي)
const color = 'blue';
=======
const color = 'red';
>>>>>>> feature/new-theming (Incoming Branch - الفرع القادم)
  • HEAD: هو الكود الموجود حالياً في الفرع الذي تقف عليه.
  • Incoming: هو الكود القادم من الفرع الآخر الذي تحاول الدمج منه.

الخطوة 3: التنظيف

  1. اختر الكود الصحيح (أو ادمج بين الاثنين يدوياً).
  2. قم بإزالة العلامات (<<<<, ====, >>>>).
  3. قم بتحضير الملف: git add <filename>.
  4. الإنهاء: git commit (في حال الدمج) أو git rebase --continue (في حال إعادة التأسيس).

5. الحفظ المؤقت: git stash

أحياناً تكون في منتصف فوضى برمجية ويطلب منك مديرك إصلاح خطأ عاجل في فرع main فوراً.

bash
# 1. احفظ عملك "المكركب" في "جيب سري" مؤقت
git stash

# 2. انتقل لفرع main وأصلح الخطأ
git switch main
# ... إصلاح الخطأ ...

# 3. عد لفرعك واستخرج العمل من الجيب السري
git switch feature/my-work
git stash pop

ماذا بعد؟

لقد أتقنت الآن التعامل مع التعقيدات المحلية. حان الوقت لنرى كيف ينسجم كل هذا في نظام التعاون عبر GitHub في الوحدة الرابعة.

تم الإصدار تحت رخصة MIT.