الوحدة 1 · نموذج Git
لماذا التحكم في الإصدارات، وكيف يفكّر Git
10 دقراءة 3 د
الدرس في لمحة
اشرح المشكلة التي يحلّها التحكم في الإصدارات، وكيف يختلف نموذج اللقطات في Git عن حفظ نسخ من الملفات، وكيف يتقاسم Git و GitHub العمل.
لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.
لدى كل مطوّر مجلد ما فيه index.html و index-old.html و index-final.html و index-final-REAL.html. ينجح هذا الأسلوب حتى اليوم الذي تحتاج فيه إلى معرفة أي نسخة كانت فيها القائمة تعمل، أو ما الذي غيّرته بين الثلاثاء والخميس، أو كيف تجمع إصلاحك مع تعديلات صديقك من الصباح نفسه. النسخ المتفرّقة من الملفات لا تجيب عن أيّ من ذلك.
التحكم في الإصدارات (version control) هو الأداة التي تجيب عن هذه الأسئلة. فهو يحفظ سجلّ مشروعك كسلسلة من الحالات المحفوظة، لكل منها تاريخ ومؤلف وملاحظة تشرح السبب. تستطيع مقارنة أي حالتين، والعودة إلى حالة قديمة، وتجربة فكرة جانبية ثم رميها، ومشاركة السجلّ كاملًا مع الآخرين. و Git هو نظام التحكم في الإصدارات الذي تستخدمه الغالبية الساحقة من الفرق في 2026، و GitHub هو المكان الذي تحتفظ فيه معظم هذه الفرق بنسختها المشتركة.
لقطات، لا تعديلات
فكرة Git الأساسية صغيرة. حين تنشئ commit (لقطة محفوظة)، يسجّل Git لقطة (snapshot): المحتوى الكامل لكل ملف يتتبّعه في تلك اللحظة. الملفات التي لم تتغيّر لا تُخزَّن مرتين، بل يعيد Git استخدام ما لديه أصلًا. ويخزّن كل commit أيضًا مؤشّرًا إلى الـ commit الذي سبقه، أي الأب (parent). اتبع هذه المؤشّرات إلى الخلف وستحصل على سجلّ المشروع.
لاحظ أن الأسهم تشير إلى الخلف. الـ commit يعرف أباه، ولا يعرف أبناءه أبدًا، لأن الأبناء لم يكونوا موجودين حين أُنشئ. هذه التفصيلة الواحدة تفسّر الكثير من سلوك Git لاحقًا، ومنه سبب عجزك عن «تعديل» commit قديم، وكل ما تستطيعه هو استبداله بآخر جديد.
Git مقابل GitHub
يستخدم الناس الاسمين كأنهما شيء واحد، وهما ليسا كذلك.
- Git برنامج على حاسوبك. يعيش السجلّ كله في مجلد مخفي اسمه
.gitداخل مشروعك. إنشاء الـ commits والفروع والدمج وقراءة السجلّ كلها تحدث محليًا، وتعمل حتى وأنت في الطائرة. - GitHub موقع وخدمة تستضيف مستودعات Git (repositories). يضيف حول Git ما يحتاجه الفريق: نسخة مشتركة يرفع إليها الجميع، و pull requests (طلبات الدمج) لمراجعة الكود، و issues، ولوحات المشاريع، و GitHub Actions للفحوص الآلية.
تستطيع استخدام Git دون GitHub (فرق كثيرة تستخدم GitLab أو Bitbucket)، لكن GitHub دون Git لا معنى له. يعلّمك هذا الكورس Git أولًا، ثم GitHub فوقه.
ما الذي ستبنيه
ستعمل على مشروع واحد طوال الكورس: موقعك الشخصي، وهو repository (مستودع) اسمه portfolio فيه index.html و styles.css وصفحة للمشاريع وسكربت صغير npm test يفحص الـ HTML. في القسم الأول تحوّل المجلد إلى repository وتتعلّم قراءة سجلّه. في القسم الثاني تنشئ الفروع وتدمج وتنفّذ rebase وتصلح تعارضًا حقيقيًا. في القسم الثالث تضعه على GitHub وتعمل عبر الـ pull requests. وفي القسم الرابع تتعلّم التراجع عن الأخطاء بأمان، وتنتهي بفرع main محميّ تفحص فيه GitHub Actions كل pull request قبل أن يُسمح بدمجه.
في الدرس التالي تثبّت Git، وتعرّفه بنفسك، وتنشئ أول commit لك.
أهم النقاط
- يسجّل التحكم في الإصدارات لقطات مسمّاة ومؤرّخة للمشروع كله، فتستطيع مقارنة التغييرات والتراجع عنها ومشاركتها بأمان.
- الـ commit في Git لقطة لكل الملفات المتتبَّعة مع مؤشّر إلى الـ commit الذي سبقه، وليس قائمة بالتعديلات.
- يعمل Git على جهازك ويعمل دون اتصال؛ أما GitHub فخدمة استضافة مبنية حول مستودعات Git.
- يختفي معظم الارتباك في Git حين تستطيع رسم الرسم البياني للـ commits وتحديد أين يشير فرعك وأين يشير الـ HEAD.