---
title: 'إتقان Git و GitHub: دليل المطور'
description: تعلم Git و GitHub من المستوى المبتدئ إلى المتقدم. يغطي هذا الدليل الشامل الأوامر، و branching، و CI/CD، وعملاء GUI، واستكشاف الأخطاء وإصلاحها، وأفضل الممارسات للتحكم الفعال في الإصدارات.
url: https://nerdleveltech.com/ar/git-github-mastery-a-developers-guide
language: ar
date: '2026-03-28'
category: tooling
tags:
  - git tutorial
  - github tutorial
  - version control
  - git commands
  - github guide
  - git gui
  - github actions
  - git branching
  - git merge
  - ci/cd pipeline
markdown_url: https://nerdleveltech.com/ar/git-github-mastery-a-developers-guide.md
attribution: 'Source: NerdLevelTech — https://nerdleveltech.com/ar/git-github-mastery-a-developers-guide'
terms: https://nerdleveltech.com/llms.txt
---

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

### ملخص

يغطي هذا الدليل الشامل لـ 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](https://git-scm.com/download/win)
2. قم بتشغيل برنامج التثبيت بالإعدادات الافتراضية
3. تحقق من التثبيت:

```bash
git --version
```

##### macOS

باستخدام Homebrew:

```bash
brew install git
```

أو التنزيل من [git-scm.com](https://git-scm.com/download/mac)

##### Linux (Ubuntu/Debian)

```bash
sudo apt update
sudo apt install git
```

#### الإعدادات

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

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

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

```bash
# Windows
git config --global core.autocrlf true

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

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

#### تهيئة مستودع

```bash
mkdir my-project
cd my-project
git init
```

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

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

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

```bash
git status
```

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

```bash
# Stage specific file
git add filename.ext

# Stage all changes
git add .

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

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

```bash
# 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
```

#### عرض التاريخ

```bash
# 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
```

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

```bash
# 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` متعدد المهام):

```bash
# 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
```

#### دمج الفروع

```bash
# Switch to target branch
git switch main

# Merge feature branch
git merge feature-branch
```

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

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

1. افتح الملفات المتنازع عليها
2. ابحث عن علامات النزاع (`<<<<<<<`، `=======`، `>>>>>>>`)
3. قم بحل النزاعات
4. قم بتجهيز (stage) الملفات التي تم حلها
5. قم بتثبيت (commit) التغييرات

```bash
# After resolving conflicts
git add resolved-file.ext
git commit -m "Resolve merge conflict"
```

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

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

```bash
# 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)

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

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

```bash
# 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

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

# Push to main branch
git push -u origin main
```

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

```bash
# 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`:

```yaml
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)

```yaml
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` **الحل:**

```bash
# أنشئ فرعاً جديداً لحفظ التغييرات
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` **الحل:**

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

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

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

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

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

1. تثبيت Git LFS
2. تتبع الملفات الكبيرة:

```bash
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)
- [ ] معالجة الأخطاء مناسبة
- [ ] اعتبارات الأداء
- [ ] اعتبارات الأمان

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

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

- [توثيق Git](https://git-scm.com/doc)
- [وثائق GitHub](https://docs.GitHub.com)
- [GitHub Skills](https://skills.GitHub.com) — دورات تفاعلية عملية (بديلة لـ GitHub Learning Lab المتوقف)

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

- [Learn Git Branching](https://learngitbranching.js.org) — درس تفاعلي مرئي للتفريع والـ rebasing
- [دروس Atlassian Git](https://www.atlassian.com/git/tutorials)

#### الكتب

- "Pro Git" تأليف Scott Chacon و Ben Straub — [متاح مجاناً عبر الإنترنت على git-scm.com/book](https://git-scm.com/book/en/v2)، يتم تحديثه بانتظام وهو المرجع النهائي

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

- [ورقة غش Git من (GitHub)](https://training.GitHub.com/downloads/GitHub-git-cheat-sheet/)
- [ورقة غش أوامر Git من (Atlassian)](https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet)

#### المجتمع

- [أسئلة Git على Stack Overflow](https://stackoverflow.com/questions/tagged/git)
- [نقاشات مجتمع GitHub](https://GitHub.com/orgs/community/discussions/)
- [مجتمع r/git على Reddit](https://www.reddit.com/r/git/)
