الدليل المرجعي للعمل على نظام غيت Git
يُعتبر نظام التحكم في النسخ Git من الأدوات الأكثر شيوعًا واستخدامًا في عالم تطوير البرمجيات. فهو نظام مفتوح المصدر يتيح للمطورين تتبع التغييرات التي تطرأ على ملفات المشروع، والعمل بشكل تعاوني بين عدة أفراد على نفس المشروع مع الحفاظ على تاريخ التعديلات بشكل منظم وموثوق. يهدف هذا المقال إلى تقديم دليل مرجعي شامل ومفصل للعمل على نظام Git، متناولًا أهم الأوامر والمفاهيم التي يحتاجها المستخدمون المحترفون والمبتدئون على حد سواء، مع التركيز على الجوانب العملية والتطبيقية.
مقدمة عن Git
تم تطوير Git في عام 2005 بواسطة لينوس تورفالدس، مبتكر نظام التشغيل لينكس، بهدف توفير نظام تحكم في النسخ يتميز بالسرعة والمرونة والكفاءة العالية. يعتمد Git على نظام توزيع نسخ المشاريع بشكل كامل بين جميع المشاركين، مما يعني أن كل نسخة محلية للمشروع تحتوي على كامل تاريخ التعديلات، وليس مجرد نسخة من الملفات الحالية. يتيح هذا النموذج توزيع العمل بفعالية عالية، حيث يمكن للمطورين العمل بدون اتصال مستمر بالإنترنت، ومن ثم دمج التعديلات لاحقًا.
المفاهيم الأساسية في Git
قبل التعمق في الأوامر العملية، من الضروري فهم المصطلحات والمفاهيم الأساسية التي تشكل جوهر عمل Git:
-
المستودع Repository: هو مكان تخزين الملفات والتاريخ الخاص بالمشروع. يمكن أن يكون المستودع محليًا على جهاز المستخدم أو على خادم بعيد مثل GitHub أو GitLab.
-
الفرع Branch: هو نسخة مستقلة من المشروع تستخدم لتطوير ميزات جديدة أو إصلاح الأخطاء دون التأثير على الفرع الرئيسي.
-
التزام Commit: يمثل نقطة تسجيل لحالة المشروع في وقت معين، يتضمن مجموعة من التغييرات مع رسالة وصفية.
-
مؤشر Staging Area: هو مساحة مؤقتة لتجميع الملفات المعدلة التي سيتم تضمينها في الالتزام القادم.
-
الدمج Merge: عملية دمج تغييرات فرع ما إلى فرع آخر.
-
التراجع Revert: عملية إلغاء أو التراجع عن تغييرات معينة أو التزامات سابقة.
الإعدادات الأولية لنظام Git
عند بداية استخدام Git على جهاز جديد، من المهم إعداد المعلومات الأساسية التي تستخدم في تحديد هوية المستخدم عند إنشاء الالتزامات.
bashgit config --global user.name "اسم المستخدم"
git config --global user.email "البريد الإلكتروني"
يمكن الاطلاع على الإعدادات الحالية بواسطة:
bashgit config --list
كما يمكن تعديل الإعدادات على مستوى المشروع فقط (بدون --global) لتخصيص الهوية بشكل مستقل عن باقي المشاريع.
إنشاء مستودع جديد
لبدء مشروع جديد باستخدام Git، يمكن إنشاء مستودع جديد في مجلد العمل عبر الأمر:
bashgit init
يقوم هذا الأمر بإنشاء مجلد مخفي .git يحتوي على كافة بيانات التتبع والتاريخ. بعد ذلك، يمكن إضافة الملفات وإجراء الالتزامات.
استنساخ مستودع موجود
في حالة العمل على مشروع قائم مخزن على خادم بعيد، يتم استنساخ المستودع إلى الجهاز المحلي باستخدام:
bashgit clone <عنوان-المستودع>
يؤدي هذا الأمر إلى تحميل نسخة كاملة من المستودع مع كل التاريخ الخاص به.
إضافة التغييرات وتجهيزها للالتزام
عند تعديل الملفات داخل المستودع، يجب تحديد الملفات التي سيتم تضمينها في الالتزام القادم من خلال “المرحلة” (Staging Area):
bashgit add <اسم-الملف>
لإضافة جميع الملفات المعدلة:
bashgit add .
تقوم هذه العملية بنقل حالة الملفات المعدلة إلى المرحلة المؤقتة، والتي ستستخدم عند تنفيذ الأمر commit.
تنفيذ الالتزام Commit
لتسجيل مجموعة من التغييرات في المستودع مع رسالة توضح طبيعة التغييرات، يتم تنفيذ الأمر:
bashgit commit -m "رسالة الالتزام"
يجب أن تكون رسالة الالتزام واضحة ومحددة لتعكس محتوى التغيير بدقة.
التحقق من حالة المستودع
لمعرفة حالة الملفات والتغييرات، يُستخدم الأمر:
bashgit status
يعرض هذا الأمر الملفات المعدلة والتي لم تُضاف بعد للمرحلة، وأيضًا الملفات غير المضافة للمستودع (Untracked).
عرض سجل الالتزامات
لمراجعة تاريخ الالتزامات، يمكن استخدام الأمر:
bashgit log
يعرض هذا السجل معلومات مفصلة عن كل التزامات مثل معرف الالتزام (hash)، الكاتب، التاريخ، والرسالة.
يمكن تخصيص العرض لتبسيط السجل، مثلاً عرض كل التزامات في سطر واحد:
bashgit log --oneline
العمل على الفروع Branches
الفروع من أهم مزايا Git التي تسمح بتطوير ميزات أو إصلاحات بشكل مستقل، دون التأثير على الخط الرئيسي للتطوير (عادةً الفرع الرئيسي اسمه main أو master).
إنشاء فرع جديد:
bashgit branch <اسم-الفرع>
التبديل إلى فرع معين:
bashgit checkout <اسم-الفرع>
إنشاء فرع جديد والانتقال إليه مباشرة:
bashgit checkout -b <اسم-الفرع>
دمج الفروع Merge
بعد الانتهاء من تطوير ميزة في فرع منفصل، يمكن دمج التغييرات إلى الفرع الرئيسي باستخدام:
bashgit checkout main git merge <اسم-الفرع>
في حالة وجود تعارضات (Conflicts) بين التغييرات، يتطلب الأمر حلها يدويًا قبل إتمام الدمج.
التعامل مع التعارضات
عندما يقوم Git بالكشف عن تعارضات في ملفات معينة أثناء الدمج أو إعادة التأسيس (rebase)، يتم تمييز المناطق المتضاربة داخل الملفات. يجب على المستخدم مراجعة هذه المناطق، تعديلها بما يتناسب، ثم إضافة الملفات المعدلة إلى المرحلة، ومن ثم استكمال العملية.
حذف الفروع
بعد الدمج والتأكد من عدم الحاجة إلى فرع معين، يمكن حذفه:
bashgit branch -d <اسم-الفرع>
وفي حال كان الفرع لم يُدمج بعد يمكن استخدام:
bashgit branch -D <اسم-الفرع>
إعادة التعيين Reset
في حالات الحاجة لإلغاء التغييرات أو التراجع عن التزامات معينة، يستخدم الأمر reset مع عدة خيارات:
-
لإرجاع المرحلة إلى حالة الالتزام الأخير مع الإبقاء على التغييرات في ملفات العمل:
bashgit reset --soft HEAD~1
-
لإلغاء الالتزام الأخير مع إزالة التغييرات من المرحلة ولكن إبقائها في ملفات العمل:
bashgit reset --mixed HEAD~1
-
لإلغاء الالتزام الأخير مع حذف التغييرات تمامًا:
bashgit reset --hard HEAD~1
سحب التحديثات من المستودع البعيد
لجلب التحديثات من المستودع البعيد ودمجها مع الفرع المحلي:
bashgit pull
يقوم هذا الأمر بسحب التغييرات ودمجها تلقائيًا.
دفع التغييرات إلى المستودع البعيد
بعد تنفيذ الالتزامات محليًا، يمكن رفعها إلى المستودع البعيد:
bashgit push origin <اسم-الفرع>
إنشاء وسحب علامات Tags
العلامات تستخدم لوضع نقاط مرجعية ثابتة في تاريخ المشروع، مثل إصدارات معينة.
إنشاء علامة جديدة:
bashgit tag <اسم-العلامة>
رفع العلامات إلى المستودع البعيد:
bashgit push origin <اسم-العلامة>
استعراض الفرق Diff
لمقارنة التغييرات بين نقطتين زمنيتين أو بين الملفات في مراحل مختلفة:
-
بين الملفات المعدلة وغير المضافة:
bashgit diff
-
بين المرحلة والالتزام الأخير:
bashgit diff --staged
التعامل مع المستودعات البعيدة Remote Repositories
تتيح Git ربط المستودع المحلي بمستودعات على الإنترنت أو خوادم خاصة.
عرض المستودعات البعيدة المرتبطة:
bashgit remote -v
إضافة مستودع بعيد جديد:
bashgit remote add <اسم-الريموت> <عنوان-المستودع>
التحقق من إعدادات Git
يمكن عرض كافة الإعدادات الحالية التي تؤثر على عمل Git باستخدام:
bashgit config --list
ولضبط إعدادات معينة:
bashgit config --global <اسم-الإعداد> <القيمة>
أهم الأوامر مع وصف مختصر
| الأمر | الوصف |
|---|---|
git init |
إنشاء مستودع Git جديد في المجلد الحالي |
git clone |
استنساخ مستودع بعيد إلى الجهاز المحلي |
git add |
إضافة ملفات إلى المرحلة المؤقتة |
git commit -m |
تسجيل التغييرات في المستودع مع رسالة التزام |
git status |
عرض حالة الملفات والتغييرات |
git log |
عرض سجل الالتزامات |
git branch |
إنشاء أو عرض الفروع |
git checkout |
التبديل بين الفروع أو استرجاع الملفات |
git merge |
دمج فرع معين في الفرع الحالي |
git pull |
جلب التحديثات من المستودع البعيد ودمجها |
git push |
رفع الالتزامات إلى المستودع البعيد |
git reset |
التراجع عن التزامات أو إعادة تعيين الحالة |
git diff |
عرض الاختلافات بين الملفات أو الالتزامات |
git remote |
إدارة المستودعات البعيدة |
git tag |
إنشاء وإدارة العلامات المرجعية |
نصائح مهمة عند استخدام Git
-
كتابة رسائل الالتزام بوضوح ودقة تعبر عن التغييرات لتسهيل مراجعة التاريخ.
-
العمل على فروع منفصلة لتطوير الميزات أو إصلاح الأخطاء قبل دمجها في الفرع الرئيسي.
-
التحقق من التغييرات قبل الالتزام باستخدام
git statusوgit diff. -
حل التعارضات بعناية وعدم الاستعجال في قبول التغييرات عند الدمج.
-
استخدام
.gitignoreلتحديد الملفات التي لا يجب تتبعها مثل ملفات الإعدادات الشخصية أو ملفات البناء المؤقتة.
ملف .gitignore
ملف .gitignore يُستخدم لتحديد الملفات والمجلدات التي لا يرغب المستخدم في تتبعها بواسطة Git. يساعد هذا في إبقاء المستودع نظيفًا وخاليًا من الملفات غير المهمة أو المؤقتة.
مثال على محتوى ملف .gitignore:
bash# تجاهل ملفات النظام
.DS_Store
# تجاهل ملفات بناء البرمجيات
/build
/dist
# تجاهل ملفات التكوين المحلية
.env
الخلاصة
يُعد Git نظامًا متكاملاً لإدارة وتتبع التعديلات في المشاريع البرمجية بفعالية عالية، مما يدعم التعاون بين فرق العمل ويوفر آلية آمنة لتطوير المشاريع بشكل منظم. يمتلك Git مجموعة واسعة من الأوامر والأدوات التي تغطي جميع مراحل التطوير من إنشاء المستودعات، العمل على الفروع، تنفيذ الالتزامات، إلى دمج التغييرات والتعامل مع المستودعات البعيدة. فهم هذه الأوامر واستخدامها بشكل صحيح يسهم بشكل كبير في رفع جودة وكفاءة عملية التطوير البرمجي.
المراجع
-
Pro Git (Scott Chacon and Ben Straub) – كتاب شامل ومجاني يشرح Git بالتفصيل.
-
الموقع الرسمي لنظام Git: https://git-scm.com
هذا الدليل المرجعي مصمم ليكون مصدرًا متكاملاً لكل من يريد العمل على نظام Git بمهارة واحترافية.

