70 lines
5.9 KiB
Markdown
70 lines
5.9 KiB
Markdown
|
---
|
|||
|
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) .
|