أساسيات Git

يتتبّع Git التغييرات التي تطرأ على ملفاتك، حتى تحفظ إصدارات منها، وتجرّب دون خوف، وتتعاون مع الآخرين.

الإعداد لأول مرة

أخبر Git من أنت (افعل ذلك مرة واحدة):

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

إنشاء مستودع

"المستودع" (repo) هو مجلد يراقبه Git.

mkdir my-project
cd my-project
git init                    # حوّل هذا المجلد إلى مستودع Git

سير العمل الأساسي

لدى Git ثلاث مناطق: - مجلد العمل — ملفاتك الفعلية - منطقة التجهيز — الملفات التي حدّدتها للحفظ - المستودع — السجل المحفوظ

Working → git add → Staging → git commit → Repository

الخطوة 1: تحقّق من الحالة

git status                  # اطّلع على ما تغيّر

الخطوة 2: جهّز الملفات

git add filename.py         # جهّز ملفًا واحدًا
git add .                   # جهّز كل الملفات المتغيّرة

الخطوة 3: احفظ التغييرات (commit)

git commit -m "Add login feature"

الخطوة 4: اعرض السجل

git log                     # السجل الكامل
git log --oneline           # سطر واحد لكل commit

التراجع عن التغييرات

git checkout -- file.py     # تجاهل التغييرات في file.py (قبل التجهيز)
git reset HEAD file.py      # أزل ملفًا من منطقة التجهيز (مع الاحتفاظ بالتغييرات)
git reset --hard            # تجاهل جميع التغييرات غير المحفوظة ⚠️

العمل مع المستودعات البعيدة (GitHub)

استنسخ مشروعًا موجودًا

git clone https://github.com/username/repo.git

ادفع الكود إلى GitHub

# أنشئ مستودعًا على GitHub أولًا، ثم:
git remote add origin https://github.com/username/repo.git
git branch -M main
git push -u origin main

اسحب التغييرات من GitHub

git pull                    # احصل على أحدث التغييرات

الفروع

تتيح لك الفروع العمل على الميزات بشكل مستقل.

git branch                          # اعرض الفروع
git branch feature-login            # أنشئ فرعًا جديدًا
git checkout feature-login          # انتقل إلى ذلك الفرع
git checkout -b feature-login       # أنشئ فرعًا وانتقل إليه في خطوة واحدة (اختصار)

# ادمج فرعًا في main
git checkout main
git merge feature-login

# احذف فرعًا
git branch -d feature-login

الأنماط الشائعة

# احفظ كل التغييرات بأمر واحد
git add -A && git commit -m "Describe your changes"

# اطّلع على ما تغيّر في ملف
git diff filename.py                # التغييرات غير المجهّزة
git diff --staged filename.py       # التغييرات المجهّزة

# اطّلع على ما تغيّر في آخر commit
git show

# تجاهل ملفات (أنشئ ملف .gitignore)
echo "venv/" > .gitignore
echo ".env" >> .gitignore
echo "__pycache__/" >> .gitignore

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

  1. أكثِر من حفظ التغييرات (commit) — اجعل كل commit صغيرًا ومركّزًا (لا "أصلحت أشياء")
  2. اكتب رسائل جيدة — "أضف التحقق من كلمة المرور" لا "حدّث الملف"
  3. فرع واحد لكل ميزة — أبقِ main نظيفًا
  4. لا تُودِع الأسرار أبدًا — مفاتيح API وكلمات المرور وملفات .env مكانها في .gitignore

دورك الآن — تمرين مصغّر

mkdir -p /tmp/git-practice && cd /tmp/git-practice
git init
echo "# My Project" > README.md
git add README.md
git commit -m "Initial commit"
echo "print('hello')" > app.py
git add app.py
git commit -m "Add hello script"
git log --oneline