إتقان Git و GitHub: دليل المطور

٢٨ مارس ٢٠٢٦

Git & GitHub Mastery: A Developer's Guide

ملخص

يغطي هذا الدليل الشامل لـ Git و GitHub كل شيء بدءًا من مفاهيم التحكم في الإصدار الأساسية وصولاً إلى سير العمل المتقدم. ستتعلم أوامر Git الأساسية، واستراتيجيات التفريع (branching)، وتقنيات الدمج (merging)، وكيفية استخدام GitHub للتعاون. يتضمن الدليل أمثلة عملية، ووسائل إيضاح بصرية، ونصائح لاستكشاف الأخطاء وإصلاحها لمساعدتك في إتقان التحكم في الإصدار. تشمل المواضيع الرئيسية:

  • إعداد Git على أي نظام تشغيل
  • الأوامر الأساسية وسير العمل
  • استراتيجيات التفريع وحل النزاعات (conflict resolution)
  • التعاون عبر GitHub باستخدام طلبات السحب (pull requests)
  • خطوط أنابيب CI/CD باستخدام GitHub Actions
  • مقارنات بين واجهات المستخدم الرسومية (GUI)
  • الأخطاء الشائعة وحلولها
  • أفضل الممارسات للتطوير الاحترافي

مقدمة في التحكم في الإصدار و Git

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

لماذا يعد التحكم في الإصدار مهمًا

بدون التحكم في الإصدار، يواجه المطورون تحديات عديدة:

  • صعوبة تتبع التغييرات عبر ملفات متعددة
  • خطر فقدان العمل بسبب الحذف العرضي أو الكتابة فوق الملفات
  • تحديات في التعاون مع أعضاء الفريق
  • عدم وجود سجل واضح لمن قام بتغيير ماذا ولماذا

يحل Git هذه المشكلات من خلال توفير:

  • التحكم الموزع في الإصدار (كل مطور لديه نسخة كاملة من المستودع)
  • إمكانيات التفريع والدمج
  • تتبع التغييرات على مستوى السطر
  • النزاهة التشفيرية لقاعدة الكود بأكملها

مفاهيم Git الأساسية

فهم هذه المفاهيم الأساسية أمر بالغ الأهمية:

  1. المستودع (repo): مجموعة من الملفات وتاريخها الكامل
  2. Commit: لقطة (snapshot) لمستودعك في نقطة زمنية محددة
  3. الفرع (Branch): نسخة موازية من قاعدة الكود
  4. Clone: نسخة محلية من مستودع بعيد
  5. Pull: جلب التغييرات من مستودع بعيد
  6. Push: إرسال التغييرات إلى مستودع بعيد
  7. Merge: دمج التغييرات من فروع مختلفة
  8. Fork: نسخة شخصية من مشروع شخص آخر

GitHub: منصة التعاون

GitHub هي خدمة استضافة سحابية لمستودعات Git تضيف ميزات تعاون قوية:

  • واجهة قائمة على الويب لإدارة المستودعات
  • طلبات السحب (Pull requests) لمراجعة الكود
  • تتبع المشكلات (Issue tracking)
  • أدوات إدارة المشاريع
  • GitHub Actions للأتمتة
  • ميزات البرمجة الاجتماعية

إعداد Git

التثبيت

Windows
  1. قم بتنزيل أحدث إصدار من برنامج تثبيت Git لنظام Windows من git-scm.com
  2. قم بتشغيل برنامج التثبيت بالإعدادات الافتراضية
  3. تحقق من التثبيت:
git --version
macOS

باستخدام Homebrew:

brew install git

أو التنزيل من git-scm.com

Linux (Ubuntu/Debian)
sudo apt update
sudo apt install git

الإعدادات

بعد التثبيت، قم بإعداد هويتك:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global init.defaultBranch main

قم بإعداد تفضيلات نهايات الأسطر:

# Windows
git config --global core.autocrlf true

# Linux/macOS
git config --global core.autocrlf input

أوامر Git الأساسية

تهيئة مستودع

mkdir my-project
cd my-project
git init

نسخ مستودع موجود

git clone https://GitHub.com/username/repository.git

التحقق من الحالة

git status

تجهيز التغييرات (Staging)

# Stage specific file
git add filename.ext

# Stage all changes
git add .

# Stage specific changes in a file (interactive)
git add -p

تثبيت التغييرات (Committing)

# Basic commit
git commit -m "Your commit message"

# Add and commit in one command
git commit -am "Your commit message"

# Amend the previous commit
git commit --amend

عرض التاريخ

# Basic log
git log

# Compact log
git log --oneline --graph

# Show changes in a specific file
git log -p filename.ext

# Show who changed what and when
git blame filename.ext

مقارنة التغييرات

# Show unstaged changes
git diff

# Show staged changes
git diff --staged

# Compare with specific commit
git diff commit_hash

التفريع والدمج

إنشاء الفروع والتبديل بينها

منذ إصدار Git 2.23، أصبح git switch هو الأمر الموصى به لتغيير الفروع (ليحل محل git checkout متعدد المهام):

# Create new branch
git branch feature-branch

# Switch to branch (modern)
git switch feature-branch

# Create and switch in one command (modern)
git switch -c feature-branch

# Legacy equivalents (still work, but git switch is clearer)
# git checkout feature-branch
# git checkout -b feature-branch

دمج الفروع

# Switch to target branch
git switch main

# Merge feature branch
git merge feature-branch

حل نزاعات الدمج

عند حدوث نزاعات:

  1. افتح الملفات المتنازع عليها
  2. ابحث عن علامات النزاع (<<<<<<<، =======، >>>>>>>)
  3. قم بحل النزاعات
  4. قم بتجهيز (stage) الملفات التي تم حلها
  5. قم بتثبيت (commit) التغييرات
# After resolving conflicts
git add resolved-file.ext
git commit -m "Resolve merge conflict"

استراتيجيات الدمج المتقدمة

إعادة التأسيس (Rebasing)

# Rebase current branch onto main
git switch feature-branch
git rebase main

# Interactive rebase (for rewriting history)
git rebase -i HEAD~3  # Last 3 commits

الانتقاء (Cherry-Picking)

# Apply a specific commit to current branch
git cherry-pick commit-hash

تخزين التغييرات مؤقتًا (Stashing)

# Save uncommitted changes
git stash

# Apply stashed changes
git stash pop

# List stashes
git stash list

# Apply specific stash
git stash apply stash@{n}

GitHub: استضافة الكود الخاص بك

إنشاء مستودع جديد

  1. انقر على أيقونة "+" في الزاوية العلوية اليمنى
  2. اختر "New repository"
  3. أدخل اسم المستودع والوصف
  4. اختر عام (public) أو خاص (private)
  5. قم بالتهيئة بملف README (اختياري)
  6. انقر على "Create repository"

الدفع إلى GitHub

# Add remote
git remote add origin https://GitHub.com/username/repository.git

# Push to main branch
git push -u origin main

سحب التغييرات

# Fetch and merge changes
git pull origin main

# Fetch changes without merging
git fetch origin

طلبات السحب ومراجعة الكود في GitHub

إنشاء طلب سحب

  1. ادفع فرعك إلى GitHub
  2. انقر على "Compare & pull request"
  3. أضف عنوانًا ووصفًا توضيحيًا
  4. اطلب مراجعين (reviewers)
  5. انقر على "Create pull request"

أفضل ممارسات مراجعة الكود

  • اجعل طلبات السحب صغيرة ومركزة
  • قم بتضمين أوصاف وسياق واضح
  • اربط المشكلات (issues) ذات الصلة
  • استخدم @mentions لطلب مراجعين محددين
  • قم بمعالجة جميع الملاحظات قبل الدمج

مراجعة الكود

  • تحقق من الوظائف والحالات الاستثنائية (edge cases)
  • تأكد من نمط الكود واتساقه
  • ابحث عن المشكلات الأمنية المحتملة
  • اختبر التغييرات محليًا إذا لزم الأمر
  • قدم ملاحظات بناءة

GitHub Actions و CI/CD

إنشاء سير عمل أساسي

أنشئ .GitHub/workflows/ci.yml:

name: CI Pipeline

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6

    - name: Set up Node.js
      uses: actions/setup-node@v6
      with:
        node-version: 22

    - name: Install dependencies
      run: npm ci

    - name: Run tests
      run: npm test

تثبيت الإصدار (Version pinning): استخدم دائماً وسم إصدار رئيسي محدد (@v6) بدلاً من @master أو @main. هذا يمنع حدوث تغييرات جذرية غير متوقعة في سير عملك (workflows).

سير عمل النشر (Deployment Workflow)

name: Deploy to Production

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6

    - name: Deploy to server
      uses: appleboy/ssh-action@v1.2.5
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USERNAME }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          cd /var/www/myapp
          git pull origin main
          npm ci --omit=dev
          pm2 restart myapp

مقارنة بين برامج واجهة Git الرسومية (GUI Clients)

GitHub Desktop

المميزات:

  • واجهة بسيطة وسهلة الاستخدام
  • رائع للمبتدئين
  • تكامل مدمج مع GitHub
  • يعمل على منصات متعددة (Windows, macOS)

العيوب:

  • ميزات متقدمة محدودة
  • أقل قابلية للتخصيص مقارنة بالبرامج الأخرى

Sourcetree

المميزات:

  • مجاني وقوي
  • تمثيل مرئي للفروع (branches)
  • دعم الـ rebase التفاعلي
  • تكامل مع Git-flow

العيوب:

  • قد يكون مربكاً للمبتدئين
  • مشاكل في الأداء أحياناً مع المستودعات الكبيرة

GitKraken

المميزات:

  • واجهة جميلة وسهلة
  • محرر مدمج لحل تعارضات الدمج (merge conflicts)
  • دعم Git-flow و GitHub Flow
  • يعمل على منصات متعددة (Windows, macOS, Linux)

العيوب:

  • النسخة المجانية بها ميزات محدودة
  • يستهلك موارد الجهاز بشكل كبير

تكامل Git في VS Code

المميزات:

  • مدمج في المحرر الشهير
  • خفيف وسريع
  • قابل للتوسع باستخدام الإضافات (extensions)
  • عرض الفروقات (diff) داخل السطور

العيوب:

  • أقل مرئية من البرامج المتخصصة
  • بعض الميزات المتقدمة تتطلب إضافات

استكشاف أخطاء Git الشائعة وإصلاحها

تعارضات الدمج (Merge Conflicts)

الأعراض: CONFLICT (content): Merge conflict in file.ext الحل:

  1. افتح الملف وقم بحل التعارضات
  2. قم بعمل stage للملف الذي تم حله
  3. قم بعمل commit للتغييرات

رأس منفصل (Detached HEAD)

الأعراض: You are in 'detached HEAD' state الحل:

# أنشئ فرعاً جديداً لحفظ التغييرات
git switch -c new-branch-name

فشل المصادقة (Authentication Failed)

الأعراض: fatal: Authentication failed for 'https://GitHub.com/...' الحل:

  1. تحديث بيانات الاعتماد في مدير كلمات المرور (credential manager)
  2. أو استخدم SSH بدلاً من HTTPS
  3. أو استخدم رمز وصول شخصي (personal access token)

تغييرات غير مسجلة (Uncommitted Changes)

الأعراض: error: Your local changes to the following files would be overwritten الحل:

# تخزين التغييرات مؤقتاً (Stash)
git stash

# أو تجاهل التغييرات (حديث — Git 2.23+)
git restore .

# المكافئ القديم: git checkout -- .

تخزين الملفات الكبيرة (LFS)

الأعراض: error: File is too large الحل:

  1. تثبيت Git LFS
  2. تتبع الملفات الكبيرة:
git lfs install
git lfs track "*.psd"
git add .gitattributes

أفضل الممارسات في Git

رسائل الـ Commit

  • استخدم صيغة الأمر ("Add feature" وليس "Added feature")
  • اجعل سطر الموضوع أقل من 50 حرفاً
  • أضف سطراً فارغاً بين الموضوع والمتن
  • أشر إلى المشكلات (issues) أو التذاكر (tickets)
  • اشرح "لماذا" وليس فقط "ماذا"

مثال:

Add user authentication middleware

- Implement JWT token verification
- Add protected routes
- Handle token expiration

Fixes #123

استراتيجية التفريع (Branching Strategy)

Git Flow:

  • main - كود الإنتاج (Production)
  • develop - فرع التكامل
  • feature/ - الميزات الجديدة
  • release/ - التحضير للإنتاج
  • hotfix/ - إصلاحات الإنتاج العاجلة

GitHub Flow (بديل أبسط):

  • main - دائماً قابل للنشر
  • فروع الميزات (Feature branches) - تُنشأ من main
  • طلبات السحب (Pull requests) لجميع التغييرات
  • النشر من فرع main

.gitignore

قم دائماً بتضمين ملف .gitignore لاستبعاد:

  • ملفات البناء (Build artifacts)
  • التبعيات (Dependencies)
  • ملفات البيئة (Environment files)
  • الملفات الخاصة بالمحرر
  • ملفات نظام التشغيل

مثال لملف .gitignore لـ Node.js:

# Dependencies
node_modules/

# Environment variables
.env

# Build output
dist/
build/

# Logs
logs/
*.log

# Editor files
.vscode/
.idea/
*.swp

قائمة مراجعة الكود (Code Review Checklist)

  • الكود يتبع إرشادات التنسيق (style guidelines)
  • الاختبارات (tests) متضمنة وناجحة
  • التوثيق (documentation) مُحدث
  • لا يوجد كود تم تحويله لتعليق (commented-out code)
  • معالجة الأخطاء مناسبة
  • اعتبارات الأداء
  • اعتبارات الأمان

المصادر ومزيد من التعلم

التوثيق الرسمي

التعلم التفاعلي

الكتب

أوراق الغش (Cheat Sheets)

المجتمع


نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.