freeCodeCamp/guide/arabic/miscellaneous/understand-how-to-use-git-m.../index.md

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 .