دليل Git المختصر: 50 أمرًا أساسيًا يجب أن يعرفها كل مطور
ما هو Git ولماذا يُعد أداة أساسية للمطورين؟
يُعد Git نظامًا موزعًا لإدارة الإصدارات، يساعد المطورين على تتبّع التغييرات التي تطرأ على الملفات داخل المشاريع البرمجية، سواء كانت صغيرة أو كبيرة. طوّر Linus Torvalds هذه الأداة عام 2005 لدعم تطوير نواة Linux، ثم أصبحت لاحقًا المعيار الأشهر لإدارة الشيفرة المصدرية والتعاون بين فرق العمل.

تكمن قوة Git في أنه يمنح كل مطور نسخة كاملة من المستودع على جهازه المحلي، بما في ذلك سجل التغييرات الكامل. وهذا يسهّل الرجوع إلى نسخة سابقة من المشروع عند حدوث مشكلة، كما يجعل التعاون أكثر أمانًا ومرونة عند استخدام خدمات مثل GitHub وGitLab وBitbucket.
ما المقصود بنظام إدارة الإصدارات الموزع؟
نظام إدارة الإصدارات الموزع هو بيئة تسمح لك بحفظ تاريخ التعديلات التي تجريها على ملفات المشروع، مع الاحتفاظ بهذا التاريخ محليًا على جهازك. وبذلك يمكنك:
- تتبّع كل تغيير تم على الملفات.
- الرجوع إلى إصدار سابق بسهولة.
- العمل على ميزات جديدة في فروع مستقلة.
- دمج التعديلات بين أعضاء الفريق بطريقة منظمة.
- الاحتفاظ بنسخة احتياطية كاملة من المشروع.
لهذا السبب، لا يُستخدم Git فقط في المشاريع الضخمة، بل هو مناسب أيضًا للمشاريع الفردية التي تحتاج إلى تنظيم ومرونة على المدى الطويل.
أوامر إعداد Git الأساسية
التحقق من إعدادات Git
يعرض الأمر التالي معلومات الإعداد الحالية، مثل اسم المستخدم والبريد الإلكتروني وخيارات أخرى محفوظة محليًا أو عالميًا:
git config -l
تعيين اسم المستخدم
استخدم هذا الأمر لتحديد الاسم الذي سيظهر في عمليات commit:
git config --global user.name "Fabio"
تعيين البريد الإلكتروني
يُستخدم هذا البريد لربط التعديلات بك داخل سجل المشروع:
git config --global user.email "signups@fabiopacifici.com"
تخزين بيانات تسجيل الدخول مؤقتًا
إذا كنت لا ترغب في كتابة بيانات الاعتماد في كل مرة، يمكنك تفعيل التخزين المؤقت كما يلي:
git config --global credential.helper cache
بدء مستودع جديد وإضافة الملفات
تهيئة مستودع جديد
هذه هي نقطة البداية لأي مشروع تريد إدارته باستخدام Git:
git init
إضافة ملف إلى منطقة التجهيز
لإضافة ملف محدد إلى staging area:
git add filename_here
إضافة جميع الملفات
لإضافة كل الملفات المعدلة والجديدة في المشروع دفعة واحدة:
git add .
إضافة ملفات محددة بنمط معين
يمكنك استخدام علامة * لإضافة الملفات التي تبدأ باسم معين:
git add fil*
فحص حالة المستودع
يعرض هذا الأمر الملفات التي تم تجهيزها، والملفات المعدلة غير المجهزة، والملفات غير المتتبعة:
git status
أوامر الحفظ وكتابة Commit باحترافية
إنشاء commit عبر المحرر
يفتح هذا الأمر محرر النصوص لكتابة رسالة تفصيلية تتضمن عنوانًا مختصرًا ووصفًا أوسع للتعديل:
git commit
إنشاء commit برسالة مباشرة
إذا كنت تريد رسالة سريعة دون فتح المحرر:
git commit -m "your commit message here"
حفظ التعديلات دون تمريرها يدويًا على staging
هذا الأمر مفيد عند التعامل مع ملفات متتبعة مسبقًا:
git commit -a -m "your commit message here"
مراجعة السجل والتغييرات
عرض سجل التعديلات
git log
يعرض هذا الأمر سجل جميع عمليات commit في المستودع الحالي.
عرض السجل مع تفاصيل التغييرات
git log -p
يفيد هذا الأمر عندما تحتاج إلى رؤية التغييرات الفعلية داخل الملفات مع كل عملية حفظ.
عرض commit محدد
git show commit-id
استبدل commit-id بالمعرّف الحقيقي للعملية التي تريد فحصها.
عرض إحصاءات السجل
git log --stat
يوضح عدد الأسطر المعدلة وأسماء الملفات المتأثرة في كل commit.
عرض الفروقات قبل الحفظ
الأمر git diff مهم جدًا لمراجعة ما تغيّر قبل تثبيته نهائيًا:
git diff
git diff all_checks.py
git diff --staged
git diff: يعرض التعديلات غير المجهزة.git diff all_checks.py: يعرض تغييرات ملف محدد.git diff --staged: يعرض التعديلات التي أُضيفت إلىstaging area.
إضافة التعديلات بشكل تفاعلي
إذا أردت اختيار أجزاء معينة فقط من التعديلات لتجهيزها:
git add -p
حذف الملفات وإعادة تسميتها وتجاهلها
حذف ملف متتبع
git rm filename
يحذف الملف من المشروع ويجهّز هذا الحذف للحفظ في commit جديد.
إعادة تسمية ملف
git mv oldfile newfile
ينفذ إعادة التسمية ويجهّزها مباشرة ضمن التغييرات القادمة.
تجاهل الملفات غير المرغوب في تتبعها
أنشئ ملفًا باسم .gitignore وحدد داخله الملفات أو المجلدات التي لا تريد أن يتتبعها Git، مثل ملفات البناء المؤقتة أو الأسرار المحلية.
التراجع عن التغييرات بأمان
التراجع عن تغييرات غير مجهزة
git checkout filename
يعيد الملف إلى آخر نسخة محفوظة في المستودع، لذا استخدمه بحذر حتى لا تفقد تعديلاتك المحلية.
إلغاء تجهيز تغييرات تمت إضافتها إلى staging
git reset HEAD filename
git reset HEAD -p
يتيح لك هذا الأمر سحب التعديلات من staging area مع الإبقاء عليها داخل الملف نفسه.
تعديل آخر commit
git commit --amend
يفيد هذا الأمر إذا أردت تحديث آخر عملية حفظ، سواء لتعديل الرسالة أو لإضافة ملفات نسيت تضمينها. لكن من الأفضل تجنب استخدامه بعد نشر commit علنًا في مستودع مشترك.
التراجع عن آخر commit
git revert HEAD
ينشئ هذا الأمر commit جديدًا يعكس تأثير آخر تعديل، دون حذف السجل السابق.
التراجع عن commit قديم
git revert commit_id_here
استخدم معرّف العملية المطلوبة للتراجع عنها مع الحفاظ على تاريخ المشروع بشكل واضح وآمن.
إدارة الفروع في Git
إنشاء فرع جديد
git branch branch_name
ينشئ فرعًا جديدًا دون الانتقال إليه مباشرة.
الانتقال إلى فرع آخر
git checkout branch_name
يُنقلك هذا الأمر إلى الفرع المطلوب لمتابعة العمل عليه.
عرض جميع الفروع
git branch
يعرض قائمة الفروع المحلية، مع تمييز الفرع الحالي.
إنشاء فرع جديد والانتقال إليه فورًا
git checkout -b branch_name
اختصار عملي يجمع بين الإنشاء والانتقال في خطوة واحدة.
حذف فرع بعد الانتهاء منه
git branch -d branch_name
يُستخدم عادة بعد دمج الفرع والتأكد من عدم الحاجة إليه مجددًا.
دمج فرعين
git merge branch_name
يعمل هذا الأمر على دمج تاريخ الفرع المحدد داخل الفرع الحالي.
عرض السجل بشكل رسومي
git log --graph --oneline
يسهّل هذا العرض فهم مسار الفروع وعمليات الدمج بسرعة.
عرض جميع الفروع بشكل رسومي
git log --graph --oneline --all
خيار ممتاز عند التعامل مع مشاريع متعددة الفروع أو عند مراجعة تاريخ الفريق كاملًا.
إلغاء عملية دمج متعارضة
git merge --abort
إذا واجهت تعارضًا أثناء الدمج وأردت البدء من جديد، فهذا الأمر يعيد الحالة إلى ما قبل الدمج.
العمل مع المستودعات البعيدة Remote Repositories
إضافة مستودع بعيد
git remote add origin https://repo_here
يربط هذا الأمر مستودعك المحلي بمستودع بعيد، وغالبًا ما يكون اسمه origin.
عرض الروابط البعيدة
git remote -v
يعرض عناوين URL الخاصة بالمستودعات البعيدة المرتبطة بالمشروع.
عرض تفاصيل مستودع بعيد
git remote show origin
يوفر معلومات إضافية حول الفروع المتتبعة وآلية المزامنة مع المستودع البعيد.
دفع التغييرات إلى المستودع البعيد
git push
يُرسل جميع التعديلات المحلية الجاهزة إلى المستودع البعيد.
سحب التحديثات من المستودع البعيد
git pull
يجلب آخر التغييرات من المستودع البعيد ثم يدمجها تلقائيًا في فرعك الحالي.
عرض الفروع البعيدة المتتبعة
git branch -r
يعرض أسماء الفروع الموجودة على الخادم البعيد والتي يتتبعها المستودع المحلي.
جلب التحديثات دون دمج
git fetch
ينزّل أحدث التغييرات من الخادم دون دمجها مباشرة، مما يمنحك فرصة للمراجعة أولًا.
عرض سجل فرع بعيد
git log origin/main
يساعدك هذا الأمر على مراجعة سجل commit الخاص بالفرع البعيد main.
دمج فرع بعيد مع الفرع المحلي
git merge origin/main
بعد تنفيذ fetch، يمكنك دمج التعديلات البعيدة يدويًا باستخدام هذا الأمر.
تحديث معلومات المستودعات البعيدة
git remote update
ينعش حالة المستودعات البعيدة دون فرض دمج تلقائي على فروعك المحلية.
نشر فرع جديد إلى الخادم
git push -u origin branch_name
يرفع الفرع الجديد إلى المستودع البعيد ويربطه بفرع upstream لتسهيل العمل لاحقًا.
حذف فرع بعيد
git push --delete origin branch_name_here
عندما تنتهي الحاجة إلى فرع منشور على الخادم، يمكنك حذفه بهذا الأمر.
استخدام Git Rebase بوعي
تنفيذ rebase على فرع آخر
git rebase branch_name_here
يسمح git rebase بنقل العمل المكتمل من فرع إلى آخر بطريقة تجعل السجل أكثر خطية وتنظيمًا. لكنه قد يسبب ارتباكًا إذا استُخدم دون فهم جيد، خاصة في الفروع المشتركة.
التنفيذ التفاعلي لـ rebase
git rebase -i master
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
يفتح هذا النمط محررًا يتيح لك إعادة ترتيب عمليات commit أو دمجها أو تعديل رسائلها أو حذف بعضها. وهو مفيد جدًا لتنظيف السجل قبل الدمج النهائي، لكن يفضّل استخدامه بحذر وبعد فهم كل خيار جيدًا.
الدفع الإجباري ومتى يجب تجنبه
تنفيذ force push
git push -f
يفرض هذا الأمر تحديث الفرع البعيد بالقوة حتى لو اختلف تاريخه عن النسخة المحلية. قد يكون مناسبًا في بعض الفروع الخاصة بطلبات السحب pull requests، لكنه خطر في المستودعات العامة أو الفروع المشتركة لأنه قد يستبدل عمل الآخرين.
أفضل ممارسات للاستفادة من أوامر Git
- اكتب رسائل
commitواضحة ومباشرة. - استخدم الفروع لكل ميزة أو إصلاح مستقل.
- نفّذ
git statusوgit diffباستمرار قبل الحفظ أو الدمج. - تجنّب
git push -fإلا عند الضرورة القصوى. - اعتمد على
git fetchعندما تريد مراجعة التحديثات قبل دمجها. - لا تستخدم
git commit --amendلتعديل عمليات منشورة مسبقًا في مشروع مشترك.
لماذا يفيدك هذا الدليل المختصر؟
لست بحاجة إلى حفظ كل أوامر Git عن ظهر قلب، لكن امتلاك مرجع سريع وعملي يمكن أن يرفع إنتاجيتك بشكل ملحوظ. فكلما فهمت الفرق بين أوامر مثل pull وfetch، أو بين merge وrebase، أصبح عملك أكثر أمانًا واحترافية داخل المشاريع الفردية والجماعية.
الخلاصة التقنية
يمثل Git حجر أساس في أي سير عمل برمجي حديث، لأنه لا يقتصر على حفظ التعديلات فحسب، بل يمنحك نظامًا متكاملًا لإدارة الفروع، مراجعة السجل، التراجع الآمن، والتعاون المنظم مع الفريق. وإذا أتقنت الأوامر الخمسين الواردة في هذا الدليل، فستتمكن من التعامل مع معظم السيناريوهات اليومية في تطوير البرمجيات بثقة وكفاءة أعلى.