دليل Git المختصر: 50 أمرًا أساسيًا يجب أن يعرفها كل مطور

دقائق القراءة: 7

ما هو Git ولماذا يُعد أداة أساسية للمطورين؟

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

دليل أوامر Git الأساسية لإدارة الإصدارات والعمل الجماعي للمطورين

تكمن قوة 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 حجر أساس في أي سير عمل برمجي حديث، لأنه لا يقتصر على حفظ التعديلات فحسب، بل يمنحك نظامًا متكاملًا لإدارة الفروع، مراجعة السجل، التراجع الآمن، والتعاون المنظم مع الفريق. وإذا أتقنت الأوامر الخمسين الواردة في هذا الدليل، فستتمكن من التعامل مع معظم السيناريوهات اليومية في تطوير البرمجيات بثقة وكفاءة أعلى.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *