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

70 lines
5.9 KiB
Markdown
Raw Normal View History

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