5.9 KiB
title | localeTitle |
---|---|
Understand How to Use Git Merge | فهم كيفية استخدام Git Merge |
لنفترض أنك تعمل على تطبيق مشابه لـ Reddit ، ولكن خصيصًا لمقتطفات الشفرة. في مثل هذا التطبيق ، من المحتمل أن يكون لديك فرع master
يحتوي على جميع الميزات التي تم إصدارها ، وهو فرع dev
قد يحتوي على ميزات تم ترميزها ، ولكن لم يتم تنفيذها بعد. وكل مطور في الفريق خلق له فروع الخاصة قبالة dev
فرع لالسمات الفردية. ستبدو بنية مستودع التخزين كما يلي:
--- Commit 3 --------- dev branch / --- Commit 1 ---- Commit 2 ---------------------------- master branch
إذا قررت دمج الالتزام الثالث ( Commit 3
) في الفرع master
من فرع dev
، فسيكون الأمر بسيطا مثل تشغيل أمر git merge
لأن فرع dev
محدث مع الفرع master
: كل توجد الإلتزامات في الفرع master
في فرع dev
. يمكنك دمج الفروع عن طريق تشغيل الأوامر التالية:
git checkout dev git merge master
ستكون النتيجة شيء من هذا القبيل:
--------- dev branch / --- Commit 1 ---- Commit 2 ---- Commit 3 -------------- master branch
الآن قررت أن تعمل على ميزة المصادقة. للعمل على ميزة المصادقة ، تقوم بإنشاء فرع آخر يستند إلى فرع dev
وتقرر استدعاء auth
. هذا ما يبدو عليه هيكل الريبو:
------ auth branch / --------- dev branch / --- Commit 1 ---- Commit 2 ---- Commit 3 -------------- master branch
إذا كنت سترتكب أي تغييرات على فرع auth
، فإن دمجها مع فرع dev
سيكون بسيطًا لأنه مُحدّث مع فرع dev
. الآن بينما كنت تعمل بعيداً عن ميزة المصادقة ، انتهى أحد المطورين بتشفير ميزة تمييز الجملة ، وقرر دمجها مع فرع dev
. يبدو الريبو مثل هذا الآن:
--- Commit 5 --- auth branch / --- Commit 4 ------ dev branch / --- Commit 1 ---- Commit 2 ---- Commit 3 ------------------------ master branch
فرعك ، في مصطلحات Git ، هو الآن ارتكاب وراء فرع dev
. هذا يعني أنه لا يمكنك ببساطة دمج الفرعين: يجب عليك إحضار فرع auth
الخاص بك محدثة مع فرع dev
. ويمكن القيام بذلك مع git merge
!
إن دمج فرع auth
فرع مع فرع dev
، أو فرع dev
مع الفرع master
مباشرة و يفعل ما تتوقع ، لكن دمج الطريقة الأخرى لديه خصوصياته الخاصة التي ليست بديهية عند أول استحالة. يمكنني أن أتحدث عن ذلك ، أو يمكنني أن أرشدك إلى رسم تخطيطي آخر لما يمكن أن يحدث إذا قمت بدمج فرع dev
مع فرع auth
في هذه اللحظة:
--- Commit 5 ----------- auth branch / / --- Commit 4 -------------- dev branch / --- Commit 1 ---- Commit 2 ---- Commit 3 -------------------------------- master branch
ترى ما فعلت هناك؟ انظر إلى الرسم البياني لثانية واحدة وحاول أن تفهم ما يحدث هنا قبل الانتقال. أنت ارتكبت أساسا ارتكاب آخر لفرع auth
مع الإلتزامات في فرع dev
المدرجة. لكن هذا كل الحق ، أليس كذلك؟ بعد كل شيء، في نهاية اليوم كنت أريد أن أحمل بلدي auth
فرع ما يصل إلى موعد مع dev
فرع، والآن هو ما يصل إلى التاريخ؟ نعم. ولكن دعني أوضح لك رسمًا بيانيًا لتوضيح ما يوضحه الرسم البياني الآخر: يبدو فرع auth
الآن كما يلي:
--- Commit 5 ------- Commit 4 ------- auth branch / / ------ Commit 4 --- --------------------- dev branch
انظر اليه الان؟ قمت بنسخ الالتزام أكثر. إذا كنت ستندمج مع فرع dev
الآن ، فسيبدو الأمر كالتالي:
--- Commit 5 ------- Commit 4 -------------------------------------- auth branch / / \ ------- Commit 4 ----------------------- Commit 5 ---- Commit 4 -------- dev branch
قمت بدمج نفس الالتزام مرتين! هذا بالطبع لن يكون له أي تداعيات على شفرتك بنفسك ، ولكن إذا قررت يومًا ما أن تنظر إلى git logs
الخاصة بك ، فسوف ندرك على الفور كيف يكون تاريخ git الخاص بك قذرًا ، مع بعض الالتزامات التي يتم إجراؤها مرارًا وتكرارًا. إذا أردت الرجوع إلى التزام ، فسيكون من الصعب جدًا تحديد الالتزام بالالتزام.
يفضل استخدام Git-Rebase .