--- title: Understand How to Use Git Merge localeTitle: فهم كيفية استخدام 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](http://forum.freecodecamp.com/t/how-to-use-git-rebase/13226) .