غالبًا ما يكون للمطورين خيار بين الدمج (الدمج) و Rebase (النقل). في Google ، سترى رأيًا مختلفًا ، وينصح الكثيرون بعدم استخدام Rebase ، لأن هذا قد يسبب مشاكل خطيرة. في المقالة ، سأشرح ماهية الدمج والتحرك ، ولماذا يجب (أو لا ينبغي) استخدامه ، وكيفية القيام بذلك.

Git Merge و Git Rebase يشتركان في نفس الهدف. وهي مصممة لدمج التغييرات من فرع إلى آخر. على الرغم من أن الهدف النهائي هو نفسه ، فإن مبادئ العملية مختلفة.
يعتقد بعض الأشخاص أنه يجب عليك دائمًا استخدام Rebase ؛ بينما يفضل البعض الآخر دمج. هذا له إيجابيات وسلبيات.
دمج بوابة
دمج هو ممارسة شائعة للمطورين باستخدام أنظمة التحكم الإصدار. بغض النظر عما إذا كان يتم إنشاء فروع للاختبار أو إصلاح الأخطاء أو لأسباب أخرى ، يلتقط الدمج التغييرات في مكان آخر. يأخذ الدمج محتويات فرع المصدر ويدمجها مع الفرع الهدف. في هذه العملية ، يتم تغيير الفرع الهدف فقط. تاريخ فروع المصدر لا يزال دون تغيير.
الايجابيات:- بساطة
- يحافظ على التاريخ الكامل والنظام الزمني ؛
- يحافظ على سياق فرع.
سلبيات:- يمكن ملؤها تاريخ الإلتزامات (ملوث) بالعديد من الإلتزامات ؛
- تصحيح الأخطاء باستخدام bitect git يمكن أن يصبح أكثر تعقيدًا.
كيف نفعل ذلكدمج الفرع الرئيسي في فرع الميزة باستخدام أوامر
السحب والدمج .
$ git checkout feature $ git merge master (or) $ git merge master feature
سيؤدي ذلك إلى إنشاء "التزام دمج" جديد في فرع الميزة ، والذي يحتوي على سجل لكلا الفرعين.
بوابة rebase
Rebase هي طريقة أخرى لدفع التغييرات من فرع إلى آخر. Rebase يضغط كل التغييرات في تصحيح واحد. ثم يدمج التصحيح في الفرع المستهدف.
على عكس الدمج ، نقل محفوظات الكتابة الفوقية لأنه ينقل العمل المكتمل من فرع إلى آخر. عملية يلغي القصة غير المرغوب فيها.
الايجابيات:- يبسط قصة يحتمل معقدة
- تبسيط التلاعب مع التزام واحد
- تجنب دمج عمليات الدمج في المستودعات والفروع المزدحمة
- ينظف الالتزامات المتوسطة ، مما يجعلها التزامًا واحدًا ، وهو أمر مفيد لأوامر DevOps
سلبيات:- قد يؤدي ضغط الميزات إلى بعض التعيينات إلى إخفاء السياق
- قد يكون نقل المستودعات العامة أمرًا خطيرًا عند العمل في فريق
- يظهر المزيد من العمل
- لاسترداد مع فروع المحذوفة ، مطلوب دفعة. يؤدي هذا إلى تحديث لجميع الفروع التي لها نفس الاسم ، محليًا وعن بعد ، وهذا أمر فظيع.
إذا قمت بالخطوة بشكل غير صحيح ، فستتغير القصة ، وقد يؤدي ذلك إلى مشاكل خطيرة ، لذا تأكد من ذلك!
كيف نفعل ذلكانقل فرع الميزة إلى الفرع الرئيسي باستخدام الأوامر التالية.
$ git checkout feature $ git rebase master
هذا ينقل فرع الوظيفة بالكامل إلى الفرع الرئيسي. يتغير تاريخ المشروع ، ويتم إنشاء تعهدات جديدة لكل التزام في الفرع الرئيسي.
حركة تفاعلية
يتيح لك ذلك تغيير الإرتباطات عند نقلها إلى فرع جديد. هذا أفضل من النقل التلقائي لأنه يوفر تحكمًا كاملًا في تاريخ التعهدات. يستخدم عادةً لمسح السجل قبل دمج فرع الميزة في برنامج رئيسي.
$ git checkout feature $ git rebase -i master
سيؤدي هذا إلى فتح المحرر ، وسرد جميع الالتزامات التي سيتم نقلها.
pick 22d6d7c Commit message#1 pick 44e8a9b Commit message#2 pick 79f1d2h Commit message#3
هذا يحدد بالضبط كيف سيبدو الفرع بعد النقل. عن طريق ترتيب الأشياء ، يمكنك جعل القصة كما تريد. يمكنك استخدام أوامر
الإصلاح والسكواش والتحرير وما إلى ذلك.

أي واحد للاستخدام؟
إذن ما هو الأفضل؟ ماذا يوصي الخبراء؟من الصعب اتخاذ القرار الصحيح الوحيد حول أيهما أفضل للاستخدام ، لأن جميع الفرق مختلفة. كل هذا يتوقف على الاحتياجات والتقاليد داخل الفريق.
اتخاذ القرارات على أساس كفاءة الفريق في جيت. هل البساطة أو إعادة كتابة التاريخ أمر مهم بالنسبة لك ، أو ربما شيء آخر؟
ماذا أوصي؟مع نمو الفريق ، يصبح من الصعب إدارة أو تتبع تغييرات التطوير باستخدام عملية الدمج. للحصول على سجل التزام نظيف ومفهوم ، من الحكمة استخدام Rebase.
فوائد Rebase:- أنت تتطور محليًا: إذا لم تشارك عملك مع أي شخص آخر. في الوقت الحالي ، يجب أن تفضل نقل الدمج للحفاظ على قصتك في حالة جيدة. إذا كان لديك مستودع تخزين شخصي لا تتم مشاركته مع المطورين الآخرين ، فيمكنك إعادة الجدولة حتى بعد الانتقال إلى فرعك.
- الرمز الخاص بك جاهز للمراجعة: لقد أنشأت طلب سحب. يقوم الآخرون بتحليل عملك وإمكانية سحبه إلى مقابسه لإجراء مراجعة محلية. في الوقت الحالي ، لا ينبغي عليك تحريك عملك. يجب عليك إنشاء التزام "إعادة" وتحديث الفرع. يساعد ذلك في تتبع طلبات سحب الطلبات ويمنع الانقطاع العرضي للقصة.
- تتم المراجعة وجاهزة للاندماج في الفرع المستهدف. مبروك! أنت على وشك حذف فرع الميزات. نظرًا لأنه من الآن فصاعدًا ، لن يجلب مطورو البرامج الآخرون هذه التغييرات ، فهذه هي فرصتك لتغيير قصتك. في هذه المرحلة ، يمكنك إعادة كتابة المحفوظات وإعادة تعيين التعهدات الأصلية ، وتندمج "التعديلات" و "الدمج" المزعجة في مجموعة صغيرة من العمليات المستهدفة. إنشاء دمج واضح لهذه الإلتزامات أمر اختياري ، لكنه مهم. فإنه يسجل عندما وصلت وظيفة سيد.
أنت تعرف الآن ، على الرغم من عدم الأهمية ، ولكن الفرق بين دمج و Rebase. أنا متأكد من أنك ستتخذ القرار الصحيح وستستخدم ما هو مناسب لك.
لا تنسى: code = coffee + developer