ثلاثة أوامر Git قبل Commit: ما الفرق بين diff وcached وHEAD؟
افصل التعديل الموجود في ملفك عن التعديل المجهز للحفظ، ثم راجع ما سيدخل الالتزام فعلًا بأوامر قراءة فقط.

قد يكون الملف نفسه معدّلًا ومجهزًا للحفظ في الوقت نفسه: جهزت نسخة منه، ثم أكملت الكتابة بعد ذلك. لهذا لا تجيب كل أوامر git diff عن السؤال نفسه، وقد ترى نتيجة فارغة في مقارنة بينما توجد تغييرات في مقارنة أخرى.
اسأل عن المكان الذي تقارنه
| الأمر | المقارنة |
|---|---|
| git diff | ملف العمل مقارنة بمنطقة التجهيز |
| git diff --cached | منطقة التجهيز مقارنة بآخر التزام |
| git diff HEAD | ملف العمل مقارنة بآخر التزام |
هذه أوامر عرض لا تحفظ التعديلات ولا ترفعها. وتوضح وثائق Git أن --staged مرادف لـ--cached. إذا كان المستودع جديدًا بلا أول التزام، فلا تفترض وجود HEAD صالح لكل مثال.

مثال صغير في مستودع تجريبي
git status --short git diff -- notes.txt git diff --cached -- notes.txt git diff HEAD -- notes.txt
للتجربة، اجعل notes.txt ملفًا عاديًا محفوظًا في التزام سابق. عدّل سطرًا، وجهزه بالطريقة المعتادة، ثم عدّل السطر مرة أخرى دون تجهيز التعديل الثاني. راقب كيف يعرض cached ما جهزته، بينما يعرض diff الفرق اللاحق الذي لم تجهزه.
قبل حفظ الالتزام
- راجع أسماء الملفات من git status، ولا تفترض أن كل تعديل يخص مهمتك.
- افتح الفرق المجهز نفسه، لا الفرق الكلي وحده.
- اقرأ الإضافات والحذف، وراجع أي ملف إعداد أو بيانات شخصية.
- احتفظ بالتعديلات غير المتعلقة بعملك دون إعادة ضبط جماعي.
وجود فرق صحيح لا يثبت أن البرنامج يعمل، ونجاح الاختبار لا يخبرك تلقائيًا بأي ملفات جهزتها. اجمع الأمرين: راجع نطاق الحفظ وسجّل ما اختبرته فعلًا. وإذا أردت فحص ملف ذي مسافات في اسمه، ضعه بين علامتي اقتباس، وأبقِ -- لفصل مسار الملف عن الخيارات.
المصادر والمراجع
دليل أصلي من B52؛ راجع الروابط للمعلومات المرجعية.


