أول نقاط الحفظ في Git: init و add و commit
هذا هو قلب Git: الدورة التي ستكررها مئات المرات في كل مشروع. تعدّل ملفاتك، ثم تختار ما تريد حفظه، ثم تنشئ نقطة حفظ برسالة واضحة. في هذا الدرس سنبني موقعاً صغيراً خطوة بخطوة، وسنحفظ تاريخه، وستفهم الفكرة التي تحيّر كثيرين في البداية: منطقة التجهيز.
المناطق الثلاث
Section titled “المناطق الثلاث”الملف في Git يمر بثلاث مناطق:
- مجلد العمل (Working Directory): ملفاتك كما تراها وتعدّلها.
- منطقة التجهيز (Staging Area): الملفات التي اخترت حفظها في النقطة القادمة.
- المستودع (Repository): نقاط الحفظ المسجلة نهائياً في التاريخ.
تخيّلها مثل التصوير الجماعي: مجلد العمل هو كل الناس في الحفلة، ومنطقة التجهيز هي من تطلب منهم الوقوف أمام الكاميرا، و commit هو الضغط على زر التصوير. لا يظهر في الصورة إلا من وقف أمام الكاميرا.
مجلد العمل ──git add──▶ منطقة التجهيز ──git commit──▶ المستودعإنشاء المستودع
Section titled “إنشاء المستودع”mkdir my-sitecd my-sitegit initثم ننشئ ملفين: index.html فيه عنوان الموقع، و README.md فيه وصفه. لنسأل Git عن الحالة:
git statusOn branch main
No commits yet
Untracked files: (use "git add <file>..." to include in what will be committed) README.md index.html
nothing added to commit but untracked files present (use "git add" to track)Git يرى الملفين، لكنه يصفهما بأنهما غير متتبَّعين (Untracked): لن يحفظهما حتى تطلب ذلك.
git add: التجهيز
Section titled “git add: التجهيز”git add index.htmlgit status --shortA index.html?? README.md--short يعرض الحالة مختصرة: A تعني «مُضاف ومجهَّز للحفظ»، و ?? تعني «غير متتبَّع». ولإضافة كل الملفات المتغيرة مرة واحدة:
git add .git statusOn branch main
No commits yet
Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: README.md new file: index.htmlالنقطة . تعني «كل شيء في المجلد الحالي».
git commit: نقطة الحفظ
Section titled “git commit: نقطة الحفظ”git commit -m "إضافة الصفحة الرئيسية وملف README"[main (root-commit) c8ef559] إضافة الصفحة الرئيسية وملف README 2 files changed, 2 insertions(+) create mode 100644 README.md create mode 100644 index.html-m: رسالة الحفظ.c8ef559: معرّف نقطة الحفظ (جزء من رمز طويل فريد). عندك سيكون مختلفاً.root-commit: هذه أول نقطة في تاريخ المستودع.
ماذا تغيّر؟ git diff
Section titled “ماذا تغيّر؟ git diff”نضيف فقرة ترحيب في index.html، ثم:
git status --shortgit diff M index.htmldiff --git a/index.html b/index.htmlindex c937ee7..e183c77 100644--- a/index.html+++ b/index.html@@ -1 +1,2 @@ <h1>موقعي</h1>+<p>أهلاً بك</p>Mتعني «معدَّل» (Modified).git diffيعرض الفرق بالتفصيل: السطر الذي يبدأ بـ+أُضيف، والذي يبدأ بـ-حُذف.
راجع git diff دائماً قبل add لتتأكد أنك تحفظ ما تقصده فقط.
تاريخ المشروع: git log
Section titled “تاريخ المشروع: git log”بعد حفظ التعديل بـ git add index.html ثم git commit -m "إضافة فقرة ترحيب":
git log --oneline4abe678 إضافة فقرة ترحيبc8ef559 إضافة الصفحة الرئيسية وملف READMEالأحدث في الأعلى. و git log بدون --oneline يعرض تفاصيل أكثر: صاحب كل نقطة، وبريده، وتاريخها.
ملفات لا نريد حفظها: .gitignore
Section titled “ملفات لا نريد حفظها: .gitignore”بعض الملفات لا يجب أن تدخل Git أبداً: كلمات المرور، وملفات الإعدادات السرية، والمجلدات الضخمة التي تُولّد تلقائياً مثل node_modules. أنشئ ملفاً اسمه .gitignore واكتب فيه أسماءها:
secret.txtnode_modules/.envالآن لو أنشأت ملف secret.txt، سيتجاهله Git تماماً، ولن يظهر حتى في git status. ولا تنسَ حفظ ملف .gitignore نفسه في المستودع.
جرّب بنفسك
Section titled “جرّب بنفسك”- أنشئ مجلداً جديداً، وحوّله لمستودع بـ
git init. - أنشئ ملفين، وجهّز واحداً فقط بـ
git add، ولاحظgit status. - احفظ أول نقطة برسالة واضحة.
- عدّل ملفاً، وشاهد الفرق بـ
git diff، ثم احفظه. - أنشئ
.gitignoreيتجاهل ملفاً اسمهnotes.txt، وتأكد أن Git لا يراه. - اعرض التاريخ بـ
git log --oneline.
أخطاء شائعة
Section titled “أخطاء شائعة”- commit بدون add: تظهر رسالة
nothing added to commit. جهّز الملفات أولاً. - git add . دون مراجعة: قد تحفظ ملفات لم تقصدها. راجع
git statusقبل الحفظ. - نسيان -m: يفتح Git محرراً لكتابة الرسالة. اكتبها واحفظ وأغلق المحرر.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما الترتيب الصحيح لحفظ تعديل في Git؟
git add يضع التعديل في منطقة التجهيز، ثم git commit يحفظ ما في منطقة التجهيز كنقطة في التاريخ.
سؤال
ما فائدة ملف .gitignore؟
الملفات المذكورة في .gitignore لا يتتبعها Git، مثل الأسرار والملفات المولّدة تلقائياً.
الخلاصة
Section titled “الخلاصة”- الملف يمر بمجلد العمل، ثم منطقة التجهيز بـ
git add، ثم المستودع بـgit commit. git statusيعرض الحالة، و--shortيختصرها:??غير متتبَّع، وAمضاف، وMمعدَّل.git commit -m "..."ينشئ نقطة حفظ برسالة واضحة.git diffيعرض التغييرات، وgit log --onelineيعرض التاريخ..gitignoreيمنع دخول الأسرار والملفات غير المرغوبة.