Git من الصفر: لقطات لعملك
درس 1 من 3
1Git من الصفر: لقطات لعملك
الصورة الكبيرةبدون Git ينتهي بك الأمر بملفات «نهائي2_معدل_الأخير.docx». مع Git لديك آلة زمن: كل نسخة محفوظة، ومعروف من غيّر ماذا ولماذا.
ماذا تشاهد في الرسم: ثلاث مناطق: مجلد العمل حيث تعدّل، ومنطقة التحضير حيث تختار ما يدخل اللقطة، والمستودع حيث تُحفظ اللقطات للأبد.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
تخيّل ألبوم صور لمشروعك. كل مرة تنجز خطوة تلتقط صورة (commit) وتكتب تحتها تعليقًا. قبل التصوير تختار من يقف في الصورة (add). ولو خرّبت شيئًا ترجع للصورة السابقة. والفرع ألبوم جانبي تجرّب فيه فكرة دون أن تلمس الألبوم الأساسي.
Git نظام تحكّم موزّع: كل نسخة من المستودع تحمل التاريخ كاملًا. الالتزام كائن يشير إلى شجرة (لقطة كاملة للملفات) وإلى أب أو أكثر، ومعرّفه بصمة SHA من محتواه. الفرع مجرد مؤشر متحرّك على التزام، وHEAD يشير للفرع الحالي. منطقة التحضير (index) تسمح ببناء التزام دقيق من جزء من التغييرات.
قبل أن تبدأ
⌨️الطرفية
تعرف cd وls من مسار أدوات المهندس.
الفكرة الجوهرية
1المستودع وأول التزام
git init يحوّل المجلد لمستودع. git status يقول لك ما تغيّر. git add يحضّر الملفات، وgit commit -m "..." يلتقط الصورة.
git init notes cd notes echo "first idea" > ideas.txt git status # ideas.txt is untracked git add ideas.txt git commit -m "Add the first idea" git log --oneline # one commit
2منطقة التحضير: اختر ما يدخل اللقطة
عدّلت ثلاثة ملفات لكن واحدًا منها فقط جاهز؟ أضفه وحده والتزم. الالتزام الصغير برسالة واضحة أسهل في المراجعة والتراجع.
git add . ثم التزام برسالة «تعديلات». تضيع معه ملفات سرّية أو مؤقتة، ولا أحد يفهم بعد شهر ماذا تغيّر. اكتب .gitignore واكتب رسالة تشرح لماذا.3السجل والفرق
git log يعرض اللقطات، وgit diff يعرض ما تغيّر سطرًا سطرًا قبل أن تحضّره. السطر الذي يبدأ بـ + أُضيف، وبـ - حُذف.
4الفرع: جرّب بأمان
git switch -c login-page ينشئ فرعًا وينتقل إليه. تعمل فيه بحرية، والفرع الرئيسي main يبقى سليمًا. حين تنتهي تدمجه (git merge)، وإن فشلت الفكرة تحذفه.
git switch -c login-page echo "<form>...</form>" > login.html git add login.html git commit -m "Add the login form" git switch main # login.html is not here git merge login-page # now it is
مثال محلول
المسألة: حذفت فقرة مهمة من report.md ولم تحضّر شيئًا بعد. الحل: git diff report.md يريك الأسطر المحذوفة بـ -، وgit restore report.md يعيد الملف كما كان في آخر التزام. لو كنت حضّرته: git restore --staged report.md أولًا.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| Git وGitHub نفس الشيء. | Git برنامج على جهازك. GitHub موقع يستضيف المستودعات ويضيف التعاون. الدرس القادم عنه. |
| Git للكود فقط. | يناسب أي ملفات نصية: ملاحظات، توثيق، إعدادات، حتى كتاب. |
اختبر فهمك
ماذا يفعل git add؟
add يحضّر، وcommit هو الذي يلتقط.
لماذا تعمل على فرع بدل main مباشرة؟
الفرع مساحة آمنة. main يبقى قابلًا للتشغيل حتى تدمج عملًا مكتملًا.
أي رسالة التزام أفضل؟
الرسالة الجيدة تقول ماذا تغيّر ولماذا، فيفهمها زميلك بعد سنة.
بطاقات مراجعة سريعة
تحقق من فهمك
ما الفرق بين git add وgit commit؟
add يختار التغييرات ويضعها في التحضير، وcommit يحفظ ما في التحضير كلقطة دائمة برسالة.
كيف ترجع ملفًا لآخر التزام؟
git restore file إن لم يكن محضّرًا، وإن كان محضّرًا git restore --staged file ثم git restore file.
لماذا نكتب .gitignore في أول يوم؟
لأن الملف السرّي الذي يدخل التاريخ يبقى فيه حتى لو حذفته لاحقًا.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.