Git & GitHub

أول مستودع Git لك — من التهيئة إلى الرفع 2026

📅 2026-11-22⏱ 8 دقائق قراءة
في المقال السابق، قمنا بتثبيت Git وإعداده. الآن سننشئ **أول مستودع (Repository)** ونرفعه إلى GitHub. في هذا الدليل العملي، سنأخذك خطوة بخطوة من `git init` إلى `git push`، مع تمارين وحلول. ## ما هو المستودع (Repository)؟ **المستودع** هو **مجلد** يحتوي على: - **الملفات** (الكود). - **مجلد `.git`** (تاريخ كل التغييرات). - **الفروع** (Branches). **أنواع المستودعات:** <table> <thead> <tr> <th>النوع</th> <th>الوصف</th> <th>المكان</th> </tr> </thead> <tbody> <tr> <td><strong>Local Repository</strong></td> <td>مستودع محلي</td> <td>على جهازك</td> </tr> <tr> <td><strong>Remote Repository</strong></td> <td>مستودع بعيد</td> <td>على GitHub</td> </tr> </tbody> </table> ## دورة حياة Git <table> <thead> <tr> <th>المنطقة</th> <th>الوصف</th> </tr> </thead> <tbody> <tr> <td><strong>Working Directory</strong></td> <td>مجلد المشروع</td> </tr> <tr> <td><strong>Staging Area</strong></td> <td>المنطقة المؤقتة (بعد git add)</td> </tr> <tr> <td><strong>Local Repository</strong></td> <td>المستودع المحلي (بعد git commit)</td> </tr> <tr> <td><strong>Remote Repository</strong></td> <td>المستودع البعيد (بعد git push)</td> </tr> </tbody> </table> ## الجزء الأول: إنشاء مستودع محلي ### الخطوة 1: إنشاء مجلد المشروع ```bash mkdir my-first-project cd my-first-project ``` ### الخطوة 2: تهيئة Git ```bash git init ``` **النتيجة:** ``` Initialized empty Git repository in /path/to/my-first-project/.git/ ``` **ما حدث:** Git أنشأ مجلد `.git` **مخفي** يحتوي على كل بيانات المستودع. **⚠️ مهم:** لا تحذف مجلد `.git`، ولا تعدّل فيه يدوياً. ### الخطوة 3: التحقق من الحالة ```bash git status ``` **النتيجة:** ``` On branch main No commits yet nothing to commit (create/copy files and use "git add" to track) ``` ## الجزء الثاني: إضافة الملفات ### الخطوة 1: إنشاء ملف **أنشئ ملف `README.md`:** ```markdown # مشروعي الأول هذا أول مستودع Git لي! ## الميزات - تتبع التغييرات - العمل الجماعي - الرجوع لأي نسخة ``` **احفظ الملف.** ### الخطوة 2: عرض الحالة ```bash git status ``` **النتيجة:** ``` On branch main No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) README.md nothing added to commit but untracked files present ``` **التفسير:** `README.md` هو **Untracked** — Git يراه لكنه لا يتتبعه بعد. ### الخطوة 3: إضافة الملف ```bash git add README.md ``` **أو** إضافة كل الملفات: ```bash git add . ``` ### الخطوة 4: عرض الحالة مرة أخرى ```bash git status ``` **النتيجة:** ``` On branch main No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: README.md ``` **التفسير:** الملف الآن في **Staging Area** — جاهز للـ Commit. ## الجزء الثالث: أول Commit ### الخطوة 1: إنشاء Commit ```bash git commit -m "أول commit: إضافة README" ``` **النتيجة:** ``` [main (root-commit) abc1234] أول commit: إضافة README 1 file changed, 7 insertions(+) create mode 100644 README.md ``` **🎉 مبروك! أنشأت أول Commit!** ### الخطوة 2: عرض السجل ```bash git log ``` **النتيجة:** ``` commit abc1234def5678... Author: Ahmed Mohammed <ahmed@example.com> Date: Fri Nov 22 10:30:00 2026 +0300 أول commit: إضافة README ``` ### الخطوة 3: عرض السجل بشكل مختصر ```bash git log --oneline ``` **النتيجة:** ``` abc1234 أول commit: إضافة README ``` ## الجزء الرابع: إضافة المزيد من التغييرات ### الخطوة 1: عدّل `README.md` أضف سطراً جديداً: ```markdown # مشروعي الأول هذا أول مستودع Git لي! ## الميزات - تتبع التغييرات - العمل الجماعي - الرجوع لأي نسخة ## التثبيت ```bash git clone https://github.com/username/my-first-project.git ``` ``` ### الخطوة 2: عرض التغييرات ```bash git diff ``` **النتيجة:** عرض الأسطر المضافة (بالأخضر) والمحذوفة (بالأحمر). ### الخطوة 3: عرض الحالة ```bash git status ``` **النتيجة:** ``` On branch main Changes not staged for commit: (use "git add <file>..." to update what will be committed) modified: README.md ``` ### الخطوة 4: إضافة وإنشاء Commit ```bash git add . git commit -m "إضافة قسم التثبيت" ``` **النتيجة:** ``` [main def5678] إضافة قسم التثبيت 1 file changed, 5 insertions(+) ``` ### الخطوة 5: عرض السجل ```bash git log --oneline ``` **النتيجة:** ``` def5678 إضافة قسم التثبيت abc1234 أول commit: إضافة README ``` **🎉 الآن لديك تاريخ من التغييرات!** ## الجزء الخامس: إنشاء مستودع على GitHub ### الخطوة 1: اذهب إلى GitHub 1. افتح [github.com](https://github.com). 2. اضغط **+** في الأعلى → **New repository**. ### الخطوة 2: املأ المعلومات - **Repository name:** `my-first-project` - **Description:** `مشروعي الأول` - **Public** أو **Private** (اختر Public للمشاريع المفتوحة). - **⚠️ مهم:** **لا تختر** "Initialize with README" (لأنك لديك README محلي). ### الخطوة 3: اضغط Create repository **النتيجة:** سترى صفحة بها أوامر Git. ## الجزء السادس: ربط المستودع المحلي بـ GitHub ### الخطوة 1: إضافة Remote ```bash git remote add origin https://github.com/USERNAME/my-first-project.git ``` **⚠️ استبدل `USERNAME` باسمك على GitHub.** ### الخطوة 2: التحقق ```bash git remote -v ``` **النتيجة:** ``` origin https://github.com/USERNAME/my-first-project.git (fetch) origin https://github.com/USERNAME/my-first-project.git (push) ``` ### الخطوة 3: رفع الكود ```bash git push -u origin main ``` **النتيجة:** ``` Enumerating objects: 6, done. Counting objects: 100% (6/6), done. ... To https://github.com/USERNAME/my-first-project.git * [new branch] main -> main Branch 'main' set up to track remote branch 'main' from 'origin'. ``` **🎉 مبروك! رفعت مشروعك إلى GitHub!** ### الخطوة 4: تحقق على GitHub اذهب إلى: ``` https://github.com/USERNAME/my-first-project ``` **يجب أن ترى:** ملف `README.md` ومحتواه. ## الجزء السابع: دورة العمل اليومية ### 1. عدّل الكود ### 2. أضف الملفات ```bash git add . ``` ### 3. أنشئ Commit ```bash git commit -m "وصف التغييرات" ``` ### 4. ارفع ```bash git push ``` **هذا كل شيء!** كرّر هذه الخطوات. ## ملف `.gitignore` **⚠️ مهم:** بعض الملفات **لا يجب** رفعها لـ Git: - `node_modules/` - `.env` - ملفات النظام (`.DS_Store`). - ملفات البناء (`dist/`, `build/`). ### أنشئ `.gitignore`: ``` # Dependencies node_modules/ # Environment .env .env.local # Build dist/ build/ .next/ out/ # Logs *.log npm-debug.log* # OS .DS_Store Thumbs.db # IDE .vscode/ .idea/ ``` ## أوامر Git الأساسية <table> <thead> <tr> <th>الأمر</th> <th>الوظيفة</th> </tr> </thead> <tbody> <tr> <td><code>git init</code></td> <td>تهيئة مستودع</td> </tr> <tr> <td><code>git status</code></td> <td>عرض الحالة</td> </tr> <tr> <td><code>git add .</code></td> <td>إضافة كل الملفات</td> </tr> <tr> <td><code>git add file.txt</code></td> <td>إضافة ملف محدد</td> </tr> <tr> <td><code>git commit -m "msg"</code></td> <td>إنشاء commit</td> </tr> <tr> <td><code>git log</code></td> <td>عرض السجل</td> </tr> <tr> <td><code>git log --oneline</code></td> <td>السجل المختصر</td> </tr> <tr> <td><code>git diff</code></td> <td>عرض التغييرات</td> </tr> <tr> <td><code>git remote add origin URL</code></td> <td>ربط بمستودع بعيد</td> </tr> <tr> <td><code>git push -u origin main</code></td> <td>أول رفع</td> </tr> <tr> <td><code>git push</code></td> <td>رفع التغييرات</td> </tr> <tr> <td><code>git pull</code></td> <td>جلب التحديثات</td> </tr> </tbody> </table> ## تمارين عملية ### تمرين 1: مستودع جديد أنشئ مستودعاً جديداً مع ملف `index.html`. **الحل:** ```bash mkdir my-website cd my-website git init echo "<h1>مرحباً</h1>" > index.html git add . git commit -m "أول commit" ``` ### تمرين 2: إضافة ملفات متعددة أضف 3 ملفات في commit واحد. **الحل:** ```bash echo "ملف 1" > file1.txt echo "ملف 2" > file2.txt echo "ملف 3" > file3.txt git add . git commit -m "إضافة 3 ملفات" ``` ### تمرين 3: عرض السجل اعرض تاريخ المشروع. **الحل:** ```bash git log --oneline ``` ### تمرين 4: تعديل ملف عدّل ملف وأنشئ commit. **الحل:** ```bash echo "سطر جديد" >> README.md git add README.md git commit -m "تحديث README" ``` ### تمرين 5: رفع إلى GitHub ارفع المشروع. **الحل:** ```bash git remote add origin https://github.com/USERNAME/REPO.git git push -u origin main ``` ### تمرين 6: `.gitignore` أنشئ `.gitignore` لاستبعاد `node_modules`. **الحل:** ```bash echo "node_modules/" > .gitignore git add .gitignore git commit -m "إضافة .gitignore" ``` ### تمرين 7: استنساخ مستودع استنسخ مستودعاً موجوداً. **الحل:** ```bash git clone https://github.com/USERNAME/REPO.git ``` ### تمرين 8: مشروع كامل أنشئ مشروعاً، ارفعه إلى GitHub، وعدّله. **الحل:** (راجع الأمثلة أعلاه) ## حل المشاكل الشائعة ### 🔴 المشكلة 1: `src refspec main does not match any` **السبب:** لم تُنشئ commit بعد. **الحل:** ```bash git add . git commit -m "أول commit" git push -u origin main ``` ### 🔴 المشكلة 2: `remote origin already exists` **الحل:** ```bash git remote remove origin git remote add origin https://github.com/USERNAME/REPO.git ``` ### 🔴 المشكلة 3: `Permission denied` **الحل:** تأكد من SSH أو استخدام Personal Access Token. ### 🔴 المشكلة 4: `failed to push some refs` **الحل:** ```bash git pull origin main --rebase git push ``` ### 🔴 المشكلة 5: نسيت `-m` في commit **النتيجة:** سيفتح محرر. اكتب الرسالة، احفظ، وأغلق. ## جدول حالات الملفات <table> <thead> <tr> <th>الحالة</th> <th>المعنى</th> <th>الأمر</th> </tr> </thead> <tbody> <tr> <td><strong>Untracked</strong></td> <td>ملف جديد لم يُضف</td> <td><code>git add</code></td> </tr> <tr> <td><strong>Modified</strong></td> <td>ملف معدّل</td> <td><code>git add</code></td> </tr> <tr> <td><strong>Staged</strong></td> <td>ملف جاهز للـ commit</td> <td><code>git commit</code></td> </tr> <tr> <td><strong>Committed</strong></td> <td>ملف محفوظ</td> <td><code>git push</code></td> </tr> </tbody> </table> ## قائمة تحقق نهائية <table> <thead> <tr> <th>المهمة</th> <th>الحالة</th> </tr> </thead> <tbody> <tr> <td>إنشاء مستودع محلي</td> <td>⬜</td> </tr> <tr> <td>إضافة الملفات</td> <td>⬜</td> </tr> <tr> <td>إنشاء أول Commit</td> <td>⬜</td> </tr> <tr> <td>عرض السجل</td> <td>⬜</td> </tr> <tr> <td>إنشاء مستودع على GitHub</td> <td>⬜</td> </tr> <tr> <td>ربط Local بـ Remote</td> <td>⬜</td> </tr> <tr> <td>رفع الكود</td> <td>⬜</td> </tr> <tr> <td>حل التمارين الثمانية</td> <td>⬜</td> </tr> </tbody> </table> ## ماذا بعد هذا المقال؟ الآن بعد أن أنشأت أول مستودع، أنت جاهز للمقال التالي: 1. **الـ Commits** — كيف تكتب commits احترافية. 2. **الفروع (Branches)** — العمل على ميزات متعددة. 3. **الدمج (Merge)** — دمج الفروع. ## الخلاصة في هذا المقال، تعلمت: - ✅ ما هو المستودع. - ✅ `git init` لإنشاء مستودع. - ✅ `git add` لإضافة الملفات. - ✅ `git commit` لحفظ التغييرات. - ✅ `git log` لعرض السجل. - ✅ ربط Local بـ Remote. - ✅ `git push` للرفع. - ✅ `.gitignore` لاستبعاد الملفات. - ✅ حل 8 تمارين عملية. **تذكر:** Git هو **المهارة الأولى** لكل مطور. أتقنه جيداً.