لماذا Git؟
Git نظام التحكّم بالإصدارات الأكثر استخداماً في العالم. يسمح لك بـ:
- حفظ نسخ من مشروعك عبر الزمن
- العودة لأيّ نسخة سابقة
- العمل بالتوازي مع فريق بدون تضارب
- تتبّع من غيّر ماذا ومتى ولماذا
بدون Git، يصبح مشروع أيّ مطوّر فوضى بعد أسبوع.
التثبيت
Windows: حمّل من git-scm.com
Mac: brew install git
Linux: sudo apt install git (أو dnf/pacman)
تحقّق:
git --version
# git version 2.44.0الإعداد الأولي (مرّة واحدة)
git config --global user.name "اسمك"
git config --global user.email "[email protected]"
git config --global init.defaultBranch mainالبدء بمشروع
مشروع جديد
mkdir my-project
cd my-project
git initسترى رسالة Initialized empty Git repository.
استنساخ مشروع موجود
git clone https://github.com/user/project.git
cd projectالدورة الأساسية: ثلاث مراحل
Git يعمل بثلاث "مناطق":
- Working Directory — ملفاتك الحقيقية التي تعدّل عليها
- Staging Area — ملفات مُحضّرة للـ commit
- Repository — نسخة محفوظة في تاريخ Git
المسار: تعدّل → add → commit → push.
الأوامر الأساسية
git status — ماذا تغيّر؟
git statusيُظهر الملفات الجديدة، المعدّلة، والمُجهّزة.
git add — تجهيز الملفات
# ملف واحد
git add index.html
# كل الملفات المعدّلة
git add .
# ملفات بنمط
git add "*.css"git commit — حفظ نقطة تاريخية
git commit -m "إضافة صفحة التواصل"قاعدة ذهبية: اكتب رسائل commit واضحة ومحدّدة. "إصلاحات" سيئة — "إصلاح خطأ حساب الضريبة في السلّة" ممتازة.
git log — عرض التاريخ
git log # كامل
git log --oneline # سطر واحد لكل commit
git log --graph --all # رسم بياني للفروعالربط مع GitHub
إنشاء مستودع على GitHub
اذهب إلى github.com/new، أنشئ مستودعاً بدون README/.gitignore.
ربط مشروعك المحلي
git remote add origin https://github.com/USER/REPO.git
git branch -M main
git push -u origin mainالعمل اليومي
git pull # احضر آخر تحديثات من GitHub
# ... تعدّل الملفات ...
git add .
git commit -m "رسالة"
git push # ارفع للـ GitHubBranches (الفروع)
الفرع نسخة موازية من مشروعك — تطوّر ميزة جديدة بدون كسر الأصلي.
# أنشئ فرعاً جديداً وانتقل إليه
git checkout -b feature/login
# بعد الانتهاء والـ commit، ادمجه
git checkout main
git merge feature/login
# احذف الفرع بعد الدمج
git branch -d feature/loginعرض كل الفروع
git branch # محلية
git branch -a # محلية + بعيدةحل التعارضات (Merge Conflicts)
أحياناً يُعدّل شخصان نفس السطر — Git لا يستطيع الدمج تلقائياً.
git merge feature/x
# Auto-merging index.html
# CONFLICT (content): Merge conflict in index.htmlافتح الملف، ستجد:
<<<<<<< HEAD
محتواك الحالي
=======
محتوى الفرع الآخر
>>>>>>> feature/xاحذف علامات <<<<<<<، =======، >>>>>>> واترك المحتوى الصحيح. ثم:
git add index.html
git commit -m "دمج feature/x مع حل التعارض".gitignore — استبعاد ملفات
أنشئ ملف .gitignore في جذر المشروع:
# Node
node_modules/
*.log
# Env
.env
.env.local
# Build
dist/
.next/
# IDE
.vscode/
.idea/
# OS
.DS_Store
Thumbs.dbGit يتجاهل هذه الملفات تماماً.
التراجع عن التغييرات
تراجع عن ملف لم يُضف بعد
git checkout -- file.js # أو: git restore file.jsإلغاء add قبل الـ commit
git reset HEAD file.js # أو: git restore --staged file.jsتعديل آخر commit
# تعدّل الملفات ثم:
git add .
git commit --amend -m "رسالة جديدة"⚠️ لا تُعدّل commits تمّ دفعها للـ remote إن كان يستخدمها أحد.
التراجع عن commit (آمن)
git revert HEADيُنشئ commit جديد يعكس التغييرات — تاريخياً نظيف.
Pull Request (على GitHub)
الطريقة الاحترافية للمساهمة في مشروع:
- Fork المشروع على GitHub
- Clone الـ fork محلياً
- أنشئ فرعاً جديداً:
git checkout -b fix/typo - عدّل، commit، push
- افتح Pull Request من الواجهة
صاحب المشروع يراجع ويدمج.
أخطاء شائعة
- "fatal: not a git repository" — أنت خارج مجلد Git. اذهب للمجلد الصحيح.
- "Permission denied (publickey)" — أضف مفتاح SSH على GitHub
- "Your branch is ahead of origin/main by X commits" — عندك commits محلية لم تُرفع — شغّل
git push.
الأسئلة الشائعة
Git vs GitHub — ما الفرق؟
Git أداة تعمل على جهازك. GitHub موقع يستضيف مستودعات Git عبر الإنترنت. يمكن استخدام Git بدون GitHub (على خوادم خاصّة، GitLab، Bitbucket).
ما هو HEAD؟
مؤشّر لآخر commit في الفرع الحالي. HEAD~1 = commit قبل آخر واحد، وهكذا.
fork vs clone؟
- Clone: نسخة محلية من مستودع (لك أو لغيرك)
- Fork: نسخة في حسابك على GitHub من مستودع شخص آخر — للمساهمة بـ PR