لمعرفة كيف يختلف ملف متتبَّع عن نسخة سابقة في مستودع Git على جهاز Mac الخاص بك، افتح تطبيق Terminal، وانتقل إلى المستودع، وقم بتشغيل git diff REVISION -- path/to/file. استبدل REVISION بـ commit مثل HEAD~1 والمسار بمسار الملف النسبي داخل المستودع. يقارن هذا الأمر تلك النسخة المحفوظة بالملف كما هو موجود في شجرة العمل الخاصة بك الآن؛ ولا يؤدي ذلك إلى تغيير الملف.

فتح Terminal في المستودع

في Finder، حدد موقع مجلد المستودع. افتح Terminal، واكتب cd متبوعة بمسافة، ثم اسحب مجلد المستودع وأفلته داخل نافذة Terminal، ثم اضغط على Return. توضح وثائق Apple أن سحب العناصر إلى Terminal يُعد طريقة لتحديد مسارات الملفات والمجلدات. تحقق من أنك داخل شجرة عمل Git باستخدام:

git status

إذا أفاد Git بأن الدليل الحالي ليس مستودعاً، فانتقل إلى المجلد الرئيسي للمستودع وحاول مرة أخرى. يستخدم Terminal غلاف zsh افتراضياً على نظام macOS، وفقاً لشركة Apple. تعمل الأوامر أدناه داخل هذا الغلاف؛ كما أنها تستخدم مسارات محاطة بعلامات اقتباس للحفاظ على المسافات في الأسماء.

مقارنة الملف الحالي بنسخة سابقة

استخدم هذه الصيغة:

git diff REVISION -- "path/to/file"

على سبيل المثال، لمقارنة ملف Sources/Menu.swift الحالي بنسخته في الـ commit الأب المباشر السابق لـ HEAD الحالي، شغّل:

git diff 'HEAD~1' -- "Sources/Menu.swift"

تحدد علامتا -- نهاية وسائط النسخ والخيارات وبداية المسار. تشير وثائق Git إلى أن هذه الصيغة تقارن شجرة العمل بالـ commit المحدد. في النتائج، تبدأ الأسطر المأخوذة من النسخة السابقة بعلامة -، بينما تبدأ أسطر الملف الحالي بعلامة +، وتوفر الأسطر المحيطة غير المميزة سياق التغييرات. وثائق Git diff

تعني HEAD~1 الأب المباشر الأول للـ commit الحالي؛ وتتبع HEAD~2 خطوتين للأب المباشر. يعد هذا مفيداً للسجل الحديث، ولكنه قد لا يحدد التغيير الدقيق الذي تقصده، خاصة حول عمليات الدمج (merges). تقبل صيغة مراجعات Git أيضاً أسماء الفروع والوسوم (tags) ومعرّفات الـ commit. استخدم commit حددته مسبقاً عندما تحتاج إلى نقطة تاريخية معينة. صيغة مراجعات Git

للعثور على commit أجرى تغييراً على الملف، افحص سجله:

git log --oneline -- "Sources/Menu.swift"

انسخ معرّف الـ commit ذي الصلة من النتائج، ثم استخدمه في أمر diff:

git diff 4f2a9c1 -- "Sources/Menu.swift"

استبدل 4f2a9c1 بالمعرّف الفعلي الظاهر في المستودع لديك. يقبل Git معرّف commit مختصراً وغير ملتبس؛ وإذا كان ملتبساً أو غير صالح، فاستخدم معرّفاً أطول أو اسماً آخر للنسخة.

اختيار المقارنة التي تطابق سؤالك

تشمل المقارنة مع شجرة العمل أي تعديلات حالية على الملف، سواء كانت staged أو unstaged. إذا كنت تريد بدلاً من ذلك مقارنة نسختين محفوظتين (committed)، فحدد كلا الإصدارين:

git diff OLD_REV NEW_REV -- "Sources/Menu.swift"

على سبيل المثال، يقارن الأمر git diff 'HEAD~3' HEAD -- "Sources/Menu.swift" الملف المحفوظ قبل ثلاث خطوات للأب المباشر بالنسخة الموجودة عند الـ commit الحالي. لا يشمل ذلك التعديلات غير المحفوظة (uncommitted). يصف Git صيغة الـ commits المزدوجة بأنها مقارنة بين نسختين اختياريتين. وثائق Git diff

إذا كنت ترغب في المقارنة مع النسخة المجهزة للـ commit القادم (staged)، فإن صيغة --cached في Git تقارن الفهرس (index) مع commit محدد. على سبيل المثال:

git diff --cached HEAD -- "Sources/Menu.swift"

يجيب ذلك عن سؤال مختلف عن مقارنة ملف العمل الحالي: فهو يعرض التغييرات المجهزة (staged) مقارنة بـ HEAD.

قراءة المخرجات الفارغة والأخطاء الشائعة

عدم ظهور أي مخرجات من أمر diff يعني عادةً أن Git لا يرى أي اختلاف في ذلك المسار بين المراجعة المحددة والحالة الحالية المختارة. تأكد من صحة كتابة المسار واستخدام الأحرف الكبيرة والصغيرة، وتأكد من أنك داخل المستودع الصحيح. إذا ذكر Git أن المسار غير معروف في تلك النسخة، فقد لا يكون هذا الملف موجوداً في ذلك الوقت بعد، أو قد يكون المسار قد تغير. لفحص ملف تمت إعادة تسميته أو حذفه، استخدم مساره التاريخي وتحقق من قائمة الملفات أو السجل الخاص بالـ commit المعني.

الملف الذي لم يسبق لـ Git تتبعه ليس له نسخة محفوظة للمقارنة بها. بالإضافة إلى ذلك، قد لا توفر مقارنة النصوص العادية في Git مقارنة سطر بسطر قابلة للقراءة للملفات الثنائية (binary files). يعرض الأمر التغييرات فقط؛ ولا يقوم باستعادة النسخة القديمة. تجنب استخدام git checkout أو git restore عندما يكون هدفك هو الفحص فقط، لأن هذه الأوامر لها تأثيرات مختلفة على الملفات.

لإجراء مراجعة أكثر تركيزاً، أضف عدداً قليلاً من أسطر السياق، مثل git diff -U1 'HEAD~1' -- "Sources/Menu.swift". يتحكم خيار -U في Git في عدد أسطر السياق المحيطة التي تظهر. بمجرد حصولك على النسخة والمسار المطلوبين، يوفر هذا الأمر عرضاً مباشراً وقابلاً للتكرار لما يختلف مع ترك ملفك كما هو دون تعديل.

المصادر