Git School · FluxGit

تباعد فرع Git: متى تختار merge أو rebase؟

FluxGit ·

تمثل المقاطع حالات مختلفة وليست سكربتاً واحداً. اختر الحالة المناسبة لمستودعك واستبدل أسماء الفروع والمسارات وVERIFIED_COMMIT قبل الاستخدام. أوامر الإلغاء تخص العملية النشطة المقابلة فقط؛ لا تنفذ البديلين معاً.

الجواب المختصر

يتباعد الفرع عندما يحتوي الرأس المحلي وupstream على commits لا توجد في الجانب الآخر. نفذ fetch وافحص الاثنين ثم اختر الدمج. يحتفظ merge بالتاريخ، بينما يعيد rebase تطبيق commits المحلية فوق upstream بمعرّفات جديدة. التحذير وصف للرسم وليس دليلاً على فقد الملفات.

المثال وشروطه

المثال هو main يتبع origin/main، مع commitين محليين وواحدة بعيدة. تحقق من أسماء الفرع وupstream الفعلية. يحدث fetch المرجع البعيد المتتبع دون دمجه تلقائياً في فرعك. اسم remote مختلف أو فرع دون upstream يحتاج إلى تعديل الأسماء في الأوامر.

افحص الحالة قبل التعديل

اقرأ status وbranch -vv ثم نفذ fetch origin. يبين عدّ جانبي HEAD...origin/main عدد commits الحصرية لكل جانب. افحص الرسم والتغييرات أيضاً؛ العدد اثنان مقابل واحد لا يوضح إن كانت الوظيفة نفسها قد تغيرت. لا تشخص باستخدام مرجع بعيد قديم أو عدّ منفرد.

git status --short
git branch -vv
git fetch origin
git rev-list --left-right --count HEAD...origin/main
git log --oneline --graph --decorate HEAD origin/main

احتفظ بمرجع أو نسخة عمل منفصلة

قبل التكامل أنشئ rescue/before-sync عند الرأس المحلي واحفظ العمل غير المؤكد منفصلاً. يحفظ الفرع التاريخ المؤكد، بينما تختلف تغطية stash بين الملفات المتتبعة والجديدة والمتجاهلة. تحقق من النسخة. التكامل فوق تعديلات غير مرتبطة يصعب فهم التعارضات والاستعادة.

git branch rescue/before-sync HEAD

المسار الأول

اختر merge حين يلزم الحفاظ على التاريخ، خصوصاً إن شُوركت commits المحلية. يجمع merge origin/main الطرف الذي جُلب وفرعك، ويسجل عادة الأبوين عند التباعد. راجع التغيير وفحوص المشروع قبل النشر. اكتمال merge لا يضمن أن الكود المجموع صحيح.

git merge origin/main

اختر النتيجة الأخرى عن قصد

اختر rebase لعمل محلي يسمح الفريق بإعادة كتابته. يعيد rebase origin/main تطبيق العمل فوق الرأس الذي جُلب، عادة بمعرّفات جديدة. قد يعتمد الزملاء على القديمة. الرسم الخطي ليس إذناً لإعادة كتابة فرع مشترك أو تجاوز قواعد حمايته.

git rebase origin/main

الحدود والاستثناءات

في تعارض merge، اقرأ الحالة وحل وجهز الملفات وأكمل العملية؛ يلغي merge --abort التكامل عندما تسمح شروطه. في rebase حل المرحلة الحالية ثم rebase --continue، وقد يتوقف عدة مرات. يلغي rebase --abort العملية النشطة. لا تخلط المسارين.

git status
git merge --abort
git rebase --abort

التعارضات والتنظيف

Reset --hard origin/main ليس جواباً عاماً: يزيل التاريخ المحلي المنفصل من الفرع وقد يكتب فوق الملفات المتتبعة. هذا قرار بالتخلي عن العمل، بينما تجمع هذه المقالة التاريخ المرغوب. إذا أردت التخلص منه، افحص commits واحفظ النسخ المطلوبة في إجراء منفصل.

تحقق من النتيجة

تحقق من الرسم والحالة والفرق عن origin/main وفحوص المشروع. قد يرفض push عادي إذا تقدم البعيد بعد fetch. اجلب الحالة الجديدة وراجعها دون الانتقال آلياً إلى force push. احتفظ بمرجع الإنقاذ حتى مراجعة التكامل وآثاره.

git status --short
git log -8 --oneline --graph --decorate
git diff origin/main HEAD

أسئلة شائعة

لماذا يطلب pull استراتيجية؟ يجمع fetch مع اختيار تكامل قد يكون غامضاً دون سياسة. هل يمنع merge التعارض؟ لا، كلا المسارين قد يتعارض. هل rebase أفضل دائماً؟ لا؛ مشاركة commits وسياسة الفريق أهم من تفضيل عام.

راجع العملية في FluxGit

استخدم عرض التاريخ والتغييرات في FluxGit لمراجعة العملية وcommits المعنية. احتفظ بفحوص الفرع والمشاركة والملفات المحلية في هذا المثال. تعرض صفحة التنزيل النسخ والمنصات المتاحة حالياً.

مراجع Git الرسمية

مسارات ذات صلة

تنزيل FluxGit