EduFlow
Git و GitHub
⁦0%⁩

الوحدة 1 · نموذج Git

لماذا التحكم في الإصدارات، وكيف يفكّر Git

10 دقراءة 3 د

الدرس في لمحة

اشرح المشكلة التي يحلّها التحكم في الإصدارات، وكيف يختلف نموذج اللقطات في Git عن حفظ نسخ من الملفات، وكيف يتقاسم Git و GitHub العمل.

  1. 1لقطات، لا تعديلات
  2. 2Git مقابل GitHub
  3. 3ما الذي ستبنيه

لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.

لدى كل مطوّر مجلد ما فيه 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). اتبع هذه المؤشّرات إلى الخلف وستحصل على سجلّ المشروع.

يسارًا: ثلاث نسخ متفرّقة من index.html لا رابط بينها. يمينًا: ثلاثة commits، كل منها لقطة للمشروع كله، ويشير كل منها إلى أبيه، ولكل commit رسالة. نسخ index.html index-final.html index-final-REAL.html أيها الأحدث؟ ما الذي تغيّر؟ Commits a1f3 index.html styles.css "Add home" 7c2e index.html styles.css "Add menu" d90b index.html styles.css "Fix nav" كل commit يشير إلى أبيه.
نسخ من الملفات مقابل سلسلة من الـ commits

لاحظ أن الأسهم تشير إلى الخلف. الـ 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.

قراءات إضافية

تحقّق من فهمك

3 أسئلة

السؤال 1 من 3

تحفظ index.html و index-v2.html و index-final.html في مجلد واحد. ما المشكلة التي يحلّها Git ولا تحلّها هذه العادة؟

السؤال 2 من 3

ماذا يحتوي الـ commit الواحد في Git؟

السؤال 3 من 3

لا يوجد Wi-Fi في القطار. أيّ هذه الأمور ما زال بإمكانك فعله؟