graph produced by $ git log --graph
السلام عليكم
أود السؤال عن الرسم الناتج عن هذا الأمر في 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
الإجابة الصحيحة
تبدأ الخطوط الحمراء بالظهور عندما يكون لديك 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)
تبدأ الخطوط الحمراء بالظهور عندما يكون لديك 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 فيه.
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !