كيف يعمل Git — اللقطات والفروع والتاريخ

كيف يعمل Git، موضّحاً على لوحة تفاعلية: مجلّد العمل، ومنطقة التجهيز، والمستودعان المحلي والبعيد، وكيف تبني الإيداعات تاريخاً مشتركاً.

Git نظام للتحكم في الإصدارات قائم على اللقطات: فكل إيداع (commit) صورة كاملة للمستودع مرتبطة بالإيداع الأب، والفروع ليست إلا مؤشّرات تتحرك على طول التاريخ.

كيف يعمل Git — اللقطات والفروع والتاريخ

لوحة FlowJam التفاعلية لهذا الشرح — كل مسار وصف وسهم أعلاه جزء من مخطط QueryChart حقيقي يمكنك فتحه وتعديله.

كيف تقرأ هذا الشرح المرئي

  • اقرأ الأعمدة الثلاثة من اليسار إلى اليمين: التحرير، ثم الإيداع، ثم المشاركة.
  • مجموعات المسارات الأربع خط متتابع: من مجلّد العمل إلى منطقة التجهيز إلى المستودع المحلي إلى المستودع البعيد — وكل سهم يقرّب التغيير خطوة من المشاركة.
  • وقرار «هل غيّر شخصان الأسطر نفسها؟» هو التفرّع الوحيد، ومخرجاه يلتقيان عند التاريخ المشترك في النهاية.

التحرير والتجهيز

«يحرّر المطوّر الملفات في مجلّد العمل» هو الواقع غير المودَع — ملفات على القرص لم تصبح جزءاً من التاريخ بعد. وخطوة «ينقل git add التغييرات إلى منطقة التجهيز» هي الخطوة الوسطى المقصودة: فالتجهيز يتيح لك بناء إيداع من تغييرات مختارة بدل كل ما لمسته. ويفصل الشرح المرئي هاتين الخطوتين في مجموعتيهما الخاصتين لأن الإيداع على خطوتين هو ما يمنح Git دقته.

إيداع اللقطة

«يأخذ git commit لقطة للتغييرات المجهّزة» هو الموضع الذي يصير فيه التغيير دائماً. وخطوة «يخزّن Git الإيداع مع مؤشّر إلى الإيداع الأب» تجعل الرسم البياني صريحاً — فكل إيداع (عدا الأول) يسمّي الإيداع الذي قبله، وهذا ما يجعل التاريخ قابلاً للإضافة فقط وقابلاً للتدقيق. وخطوة «ينتقل مؤشّر الفرع إلى الإيداع الجديد» تكمل الفعل: فالفرع ليس إلا مؤشّراً، والإيداع على فرع هو تحريك ذلك المؤشّر. ولا شيء في الإيداع نفسه يعنيه على أي فرع هو.

مشاركة التاريخ

تعبر خطوة «يرسل git push الإيداعات إلى المستودع البعيد» من مجموعة «المستودع المحلي» إلى مجموعة «المستودع البعيد» — وهي الموضع الوحيد الذي تغادر فيه البيانات جهازك. وخطوة «يسجّل المستودع البعيد التاريخ الجديد» هي النسخة المشتركة، وقرار «هل غيّر شخصان الأسطر نفسها؟» يمثّل الدمج: فGit يدمج التواريخ المتباعدة تلقائياً ما لم تُحرَّر الأسطر نفسها، وعندئذ تجعل خطوة «تعارض الدمج — يحلّه المطوّر يدوياً» القرار البشري صريحاً قبل أن تُغلق خطوة «التاريخ مشترك ومُحدَّث» المسار.

العلاقات الرئيسية والخلاصات

  • الإيداع لقطة كاملة مرتبطة بالإيداع الأب، وهذا ما يجعل التاريخ رسماً بيانياً قابلاً للإضافة فقط.
  • الفرع مؤشّر إلى إيداع لا وعاء للتغييرات — ولهذا السبب يكون إنشاء الفروع والتنقل بينها رخيصاً.
  • التجهيز هو الخطوة الوسطى المقصودة التي تتيح لك اختيار ما يحتويه الإيداع.
  • Git موزّع: فلدى الجميع التاريخ الكامل محلياً، ولا يتبادل push/pull إلا الأجزاء الناقصة.
  • التعارضات استثناء لا قاعدة — وحين تقع، يحلّها إنسان صراحةً.

متى تستخدم هذا الشرح المرئي

  • تعليم نموذج اللقطة لفريق لم يستخدم Git إلا كسلسلة من الأوامر.
  • شرح الفروع والدمج والتعارضات عبر نموذج المؤشّرات بدل الأوامر المحفوظة.
  • تأسيس مراجعة سير عمل الإيداع والتفريع لدى الفريق على البنية الحقيقية للتاريخ.

كيف تعمل

  1. تتبّع سير العمل الحقيقي لفريقك

    علّق على المربعات بالأوامر التي يستخدمها فريقك فعلاً — فروع الميزات، وطلبات السحب (pull requests)، وrebase مقابل merge — ليوثّق المخطط ممارستك أنت لا ممارسة كتاب مدرسي.

  2. أضف نموذج الفروع

    أدرج صفَّي فرع الميزة والفرع الرئيسي داخل مجموعة المستودع المحلي، وارسم أسهم الدمج بينهما، منتهيةً عند التاريخ المشترك.

  3. ارسم بوابة طلب السحب

    أضف قراراً بين الدفع المحلي والتسجيل في المستودع البعيد: مراجعة وفحص CI يجب أن يجتازهما الفرع قبل دمجه في الفرع الرئيسي.

  4. أضف مسارات الاسترجاع

    أدرج فروع التراجع — عكس إيداع، وتعديل رسالة، وإعادة الضبط إلى حالة أسبق — وينتهي كل منها بنتيجة صريحة، فالاسترجاع نصف استخدام Git الحقيقي.

الأسئلة الشائعة

ما هو Git وبم يختلف عن أنظمة التحكم في الإصدارات الأخرى؟

Git نظام موزّع للتحكم في الإصدارات قائم على اللقطات. فكل إيداع يخزّن صورة كاملة للمستودع إضافةً إلى مؤشّر إلى الإيداع الأب، لا مجرد قائمة بتغييرات الملفات. ولأن لدى كل مطوّر التاريخ الكامل محلياً، تعمل معظم العمليات دون اتصال، ويصير التعاون مسألة تبادل إيداعات مع المستودعات البعيدة.

ما الفرع في Git؟

الفرع مؤشّر متحرك إلى إيداع. فحين تُودِع على فرع، يتقدّم المؤشّر إلى الإيداع الجديد؛ والإيداع نفسه لا يعرف على أي فرع هو ولا يعنيه ذلك. ولهذا يكون إنشاء الفرع فورياً، ولهذا لا يغيّر التنقل بين الفروع إلا اللقطة التي يعرضها مجلّد العمل.

لماذا في Git منطقة تجهيز؟

منطقة التجهيز تتيح لك بناء الإيداع عن قصد. فبإمكانك تحرير عدة ملفات، وتجهيز ما ينتمي بعضه إلى بعض منها فقط، وإيداع ذلك الاختيار — تاركاً العمل غير المرتبط دون إيداع. ومجلّد العمل ومنطقة التجهيز والمستودع ثلاث حالات منفصلة، وهي بالضبط الخط المتتابع الذي ترسمه اللوحة.

كيف يحلّ Git تعارضات الدمج؟

حين يغيّر فرعان ملفات مختلفة، أو أسطراً مختلفة، يدمجهما Git تلقائياً. وحين يغيّران الأسطر نفسها، لا يستطيع Git تخمين النسخة الصحيحة، فيؤشّر على التعارض ويطلب من إنسان أن يختار. والتعارض قرار لا إخفاق — ولهذا يوجّهه الشرح المرئي إلى خطوة حلّ صريحة قبل مشاركة التاريخ.

عدّل هذا الشرح المرئي في QueryChart (FlowJam)

افتح لوحة Git هذه نفسها كمخطط خاص بك، وأعد تسمية المسارات لتطابق سير عملك، وتتبّع تاريخك أنت.

عدّل هذا الشرح المرئي في QueryChart (FlowJam)

المزيد في الشروحات المرئية