graph produced by $ git log --graph

ٌR_Radi • منذ 6 سنوات

 

 

السلام عليكم 

أود السؤال عن الرسم الناتج عن هذا الأمر في git الذي فهمته نظريا أنه يوضح لنا branches الموجودة عندنا لكني لم أفهم الخطوط الملونة كيف أعرف من أين تبدأ الcommits لكل برانش

$ git log --oneline --decorate --graph --all

The --graph flag adds the bullets and lines to the leftmost part of the output. This shows the actual branching that's happening. The --all flag is what displays all of the branches in the repository.

لو تكرمتوا أريد شرح على هذه الرسمة البسيطة

 

برانش sidebar 

$ git branch sidebar 5bfe5e7

برانش footer قمنا بإنشائه من نفس لوكيشن برانش master

$ git checkout -b footer master
كلمات دليلية: git

الإجابة الصحيحة

Alhoqbani • منذ 6 سنوات

تبدأ الخطوط الحمراء بالظهور عندما يكون لديك branch يحتوي على commits مختلفة عن الـ master branch أو أي فرع آخر. 

ولفهم الموضوع تصور بأن git عبارة عن خط زمني رئيسي master branch ويمكن إنشاء خطوط موازيه له بالـbranching، هذه الخطوط الموزاية سيكون لها خطها الزمني والـcommits الخاصة بها. 

ولكن أي خط فرعي branch لابد أن يبدأ من commit تكون مشتركة بينه وبين الـmaster branch أو أي فرع آخر. في مثالك الـcommit المشتركة بين master و sidebar هي 5bfe5e7 

وعندما تبدأ بإضافة commits جديدة للفرع الجديد sidebar فسيبدأ برسم خطه الجديد، وفي البداية سيكون هذا الخط في نفس الصف الخاص بالفرع الرئيسي master لأن الـmaster ليس لديه أي commits جديدة بعد الـcommit المشتركة بين الفرعين. 

وما أن تبدأ بإضافة commits جديدة لـmaster سوف يصبح لديك مسارين. لأن هناك اختلاف في التاريخ الزمني بين الفرعين.

فلو نظرت إلى الفرع الآخر footer والذي بدأ مع master ويشترك مع الـcommit رقم 209752a ومازالا على نفس الخط لأن master لا يحتوي على commits جديدة تتجاوز 209752a

وأخيرًا يمكننا أن نقوم بدمج الخطين المنفصلين merge فعندما تكون على الـmaster وتحاول دمج sidebar بالأمر git merge sidebar فسيقوم git بمقارنة أربعة commits ومحاولة دمجها بأكثير من استراتيجية، وفي حال نجاح الدمج ستجد أن الخط الخاص بـsidebar عاد بالاتصال مع master وستبقى النجوم لتوضح على أي branch تم إنشاء الـcommit.

 

وهنا تكملة لمثالك الشرح الموضوع.

في الصورة أدناه لا يوجد لدينا إلى الفرع الرئيسي master branch

نقوم بإنشاء فرع جديد باسم sidebar بالأمر git checkout -b sidebar

إذا الفرعين master وsidebar يشتركان في الـcommit بعنوان Add .gitignore

بعد إضافة commit على الفرع sidebar سيتقدم على master بخطوة ولكن سيظلان على نفس الخط لأن master ليس لديه commits إضافية بعد المشتركة بينهما، وفي هذه الحالة يكون الدمج سهلًا باستخدام fast-forward merging

ولكن عند إضافة أي commit على الفرع الرئيسي master سوف يبدأ الخط بالظهور حيث أنه أصبح هنالك commits متختلفة بين الفرعين

والآن نقوم بدمج الفرعين بالأمر git merge sidebar وحيث أن هناك commits مختلفة بين الفرعين فلا يمكن الدمج بينهما بالـfast-froward بمعنى الجمع بين الـcommits فقط، بل سيقوم git بإنشاء commit جديدة  تجمع بين الفرعين.

من الصورة أعلاه نلاحظ أن الـcommit التي بدأ منها sidebar هي 1d52ca8 وهي المشتركة مع الـmaster، وعاد sidebar الخط في الالتقاء في آخر commit 
وتلاحظ أيضًا أن موقع النجمة يحدد المسار الذي تم إنشاء الـcommit فيه. 

الإجابات (1)

Alhoqbani • منذ 6 سنوات
الإجابة الصحيحة
مميز

تبدأ الخطوط الحمراء بالظهور عندما يكون لديك branch يحتوي على commits مختلفة عن الـ master branch أو أي فرع آخر. 

ولفهم الموضوع تصور بأن git عبارة عن خط زمني رئيسي master branch ويمكن إنشاء خطوط موازيه له بالـbranching، هذه الخطوط الموزاية سيكون لها خطها الزمني والـcommits الخاصة بها. 

ولكن أي خط فرعي branch لابد أن يبدأ من commit تكون مشتركة بينه وبين الـmaster branch أو أي فرع آخر. في مثالك الـcommit المشتركة بين master و sidebar هي 5bfe5e7 

وعندما تبدأ بإضافة commits جديدة للفرع الجديد sidebar فسيبدأ برسم خطه الجديد، وفي البداية سيكون هذا الخط في نفس الصف الخاص بالفرع الرئيسي master لأن الـmaster ليس لديه أي commits جديدة بعد الـcommit المشتركة بين الفرعين. 

وما أن تبدأ بإضافة commits جديدة لـmaster سوف يصبح لديك مسارين. لأن هناك اختلاف في التاريخ الزمني بين الفرعين.

فلو نظرت إلى الفرع الآخر footer والذي بدأ مع master ويشترك مع الـcommit رقم 209752a ومازالا على نفس الخط لأن master لا يحتوي على commits جديدة تتجاوز 209752a

وأخيرًا يمكننا أن نقوم بدمج الخطين المنفصلين merge فعندما تكون على الـmaster وتحاول دمج sidebar بالأمر git merge sidebar فسيقوم git بمقارنة أربعة commits ومحاولة دمجها بأكثير من استراتيجية، وفي حال نجاح الدمج ستجد أن الخط الخاص بـsidebar عاد بالاتصال مع master وستبقى النجوم لتوضح على أي branch تم إنشاء الـcommit.

 

وهنا تكملة لمثالك الشرح الموضوع.

في الصورة أدناه لا يوجد لدينا إلى الفرع الرئيسي master branch

نقوم بإنشاء فرع جديد باسم sidebar بالأمر git checkout -b sidebar

إذا الفرعين master وsidebar يشتركان في الـcommit بعنوان Add .gitignore

بعد إضافة commit على الفرع sidebar سيتقدم على master بخطوة ولكن سيظلان على نفس الخط لأن master ليس لديه commits إضافية بعد المشتركة بينهما، وفي هذه الحالة يكون الدمج سهلًا باستخدام fast-forward merging

ولكن عند إضافة أي commit على الفرع الرئيسي master سوف يبدأ الخط بالظهور حيث أنه أصبح هنالك commits متختلفة بين الفرعين

والآن نقوم بدمج الفرعين بالأمر git merge sidebar وحيث أن هناك commits مختلفة بين الفرعين فلا يمكن الدمج بينهما بالـfast-froward بمعنى الجمع بين الـcommits فقط، بل سيقوم git بإنشاء commit جديدة  تجمع بين الفرعين.

من الصورة أعلاه نلاحظ أن الـcommit التي بدأ منها sidebar هي 1d52ca8 وهي المشتركة مع الـmaster، وعاد sidebar الخط في الالتقاء في آخر commit 
وتلاحظ أيضًا أن موقع النجمة يحدد المسار الذي تم إنشاء الـcommit فيه. 

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !