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

70 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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) .