تخطَّ إلى المحتوى

أول نقاط الحفظ في Git: init و add و commit

الدرس 3 من 10 · Git و GitHub

هذا هو قلب Git: الدورة التي ستكررها مئات المرات في كل مشروع. تعدّل ملفاتك، ثم تختار ما تريد حفظه، ثم تنشئ نقطة حفظ برسالة واضحة. في هذا الدرس سنبني موقعاً صغيراً خطوة بخطوة، وسنحفظ تاريخه، وستفهم الفكرة التي تحيّر كثيرين في البداية: منطقة التجهيز.

الملف في Git يمر بثلاث مناطق:

  1. مجلد العمل (Working Directory): ملفاتك كما تراها وتعدّلها.
  2. منطقة التجهيز (Staging Area): الملفات التي اخترت حفظها في النقطة القادمة.
  3. المستودع (Repository): نقاط الحفظ المسجلة نهائياً في التاريخ.

تخيّلها مثل التصوير الجماعي: مجلد العمل هو كل الناس في الحفلة، ومنطقة التجهيز هي من تطلب منهم الوقوف أمام الكاميرا، و commit هو الضغط على زر التصوير. لا يظهر في الصورة إلا من وقف أمام الكاميرا.

مجلد العمل ──git add──▶ منطقة التجهيز ──git commit──▶ المستودع
نافذة طرفيّة
mkdir my-site
cd my-site
git init

ثم ننشئ ملفين: index.html فيه عنوان الموقع، و README.md فيه وصفه. لنسأل Git عن الحالة:

نافذة طرفيّة
git status
الناتج
On 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 index.html
git status --short
الناتج
A index.html
?? README.md

--short يعرض الحالة مختصرة: A تعني «مُضاف ومجهَّز للحفظ»، و ?? تعني «غير متتبَّع». ولإضافة كل الملفات المتغيرة مرة واحدة:

نافذة طرفيّة
git add .
git status
الناتج
On 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 -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: هذه أول نقطة في تاريخ المستودع.

نضيف فقرة ترحيب في index.html، ثم:

نافذة طرفيّة
git status --short
git diff
الناتج
M index.html
diff --git a/index.html b/index.html
index c937ee7..e183c77 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
<h1>موقعي</h1>
+<p>أهلاً بك</p>
  • M تعني «معدَّل» (Modified).
  • git diff يعرض الفرق بالتفصيل: السطر الذي يبدأ بـ + أُضيف، والذي يبدأ بـ - حُذف.

راجع git diff دائماً قبل add لتتأكد أنك تحفظ ما تقصده فقط.

بعد حفظ التعديل بـ git add index.html ثم git commit -m "إضافة فقرة ترحيب":

نافذة طرفيّة
git log --oneline
الناتج
4abe678 إضافة فقرة ترحيب
c8ef559 إضافة الصفحة الرئيسية وملف README

الأحدث في الأعلى. و git log بدون --oneline يعرض تفاصيل أكثر: صاحب كل نقطة، وبريده، وتاريخها.

ملفات لا نريد حفظها: .gitignore

Section titled “ملفات لا نريد حفظها: .gitignore”

بعض الملفات لا يجب أن تدخل Git أبداً: كلمات المرور، وملفات الإعدادات السرية، والمجلدات الضخمة التي تُولّد تلقائياً مثل node_modules. أنشئ ملفاً اسمه .gitignore واكتب فيه أسماءها:

.gitignore
secret.txt
node_modules/
.env

الآن لو أنشأت ملف secret.txt، سيتجاهله Git تماماً، ولن يظهر حتى في git status. ولا تنسَ حفظ ملف .gitignore نفسه في المستودع.

  1. أنشئ مجلداً جديداً، وحوّله لمستودع بـ git init.
  2. أنشئ ملفين، وجهّز واحداً فقط بـ git add، ولاحظ git status.
  3. احفظ أول نقطة برسالة واضحة.
  4. عدّل ملفاً، وشاهد الفرق بـ git diff، ثم احفظه.
  5. أنشئ .gitignore يتجاهل ملفاً اسمه notes.txt، وتأكد أن Git لا يراه.
  6. اعرض التاريخ بـ git log --oneline.
  • commit بدون add: تظهر رسالة nothing added to commit. جهّز الملفات أولاً.
  • git add . دون مراجعة: قد تحفظ ملفات لم تقصدها. راجع git status قبل الحفظ.
  • نسيان -m: يفتح Git محرراً لكتابة الرسالة. اكتبها واحفظ وأغلق المحرر.

سؤال

ما الترتيب الصحيح لحفظ تعديل في Git؟

سؤال

ما فائدة ملف .gitignore؟

  • الملف يمر بمجلد العمل، ثم منطقة التجهيز بـ git add، ثم المستودع بـ git commit.
  • git status يعرض الحالة، و --short يختصرها: ?? غير متتبَّع، و A مضاف، و M معدَّل.
  • git commit -m "..." ينشئ نقطة حفظ برسالة واضحة.
  • git diff يعرض التغييرات، و git log --oneline يعرض التاريخ.
  • .gitignore يمنع دخول الأسرار والملفات غير المرغوبة.