الرسم البياني للتاريخ: parent وhash والـDAG
في الدرس السابق رأينا أن كل commit هو snapshot — صورة كاملة للمشروع. والآن نسأل: كيف ترتبط هذه الصور ببعضها؟ كل commit يحمل 'ملاحظة' صغيرة تشير إلى الـcommit الذي جاء قبله — أي الـparent الخاص به. تسلسل هذه الملاحظات يكوّن رسمًا بيانيًا يتدفق في اتجاه واحد، من الماضي إلى الحاضر، يُسمى DAG. ولكل صورة
كل صورة (commit) تحمل ملاحظة: 'جئتُ مباشرة بعد تلك الصورة'. هذه الملاحظات تربط الصور في خريطة باتجاه واحد. ولكل صورة بصمة فريدة — غيّر أي شيء، وتتغير البصمة.
- parent (أب)
- المؤشر من commit إلى الـcommit الذي جاء قبله. تسلسل مؤشرات الـparent هو ما يكوّن التاريخ.
- DAG (رسم بياني موجّه لا دوري)
- شكل تاريخ Git: كل commit يشير إلى الـparent الخاص به، وهذا التسلسل يكوّن رسمًا بيانيًا يتدفق في اتجاه واحد، بلا دورات.
- hash (معرّف SHA)
- بصمة فريدة ذات طول ثابت مشتقّة من محتوى الـcommit (بما في ذلك الـparent الخاص به). غيّر حرفًا واحدًا فقط ويتغير الـhash.
- commit جذر (root)
- الـcommit الأول في المستودع. وهو الوحيد الذي لا parent له — نقطة البداية للرسم البياني.
- metadata (بيانات وصفية)
- المعلومات المرفقة بالـcommit: من كتبه، ومتى، والرسالة (commit message). وهي أيضًا تدخل في حساب الـhash.