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 <[email protected]>
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 هو **المهارة الأولى** لكل مطور. أتقنه جيداً.