على نظام macOS، قم بإزالة شجرة عمل مرتبطة ومنتهية من Terminal باستخدام git worktree remove، ولكن تحقق أولاً مما إذا كانت تحتوي على تغييرات لا تزال بحاجة إليها. يزيل Git شجرة العمل النظيفة؛ وإذا كانت غير نظيفة (dirty)، فإنه يتوقف ما لم تفرض الإزالة. للاحتفاظ بالعمل غير المكتمل، قم بإجراء commit له أو تخزينه مؤقتاً (stash) قبل إزالة الدليل. لا تضف --force لمجرد تجاوز تحذير Git: فقد يؤدي ذلك إلى حذف الملفات المحلية لشجرة العمل. تنطبق هذه الخطوات على أشجار العمل المرتبطة، وليس على دليل العمل الرئيسي للمستودع. وثائق Git لـ worktree
1. العثور على شجرة العمل والتحقق من حالتها
افتح Terminal وانتقل إلى المستودع الرئيسي أو أي شجرة عمل مرتبطة تنتمي إلى نفس المستودع. لرؤية جميع مسارات وفروع شجرة العمل المرتبطة، شغّل:
git worktree list
انسخ المسار الدقيق لشجرة العمل المنتهية. ثم افحص حالتها من داخل شجرة العمل تلك، مع وضع المسار بين علامتي اقتباس إذا كان يحتوي على مسافات:
cd "/path/to/finished-worktree"
git status --short --branch
يساعد مخرج الحالة في الكشف عن الملفات المتتبعة المعدلة أو المجهزة (staged) والملفات غير المتتبعة. تحقق أيضاً من شجرة العمل في Finder بحثاً عن أي ملفات محلية يعتمد عليها سير عملك. قد لا تظهر الملفات التي يتجاهلها Git في مخرجات الحالة العادية. إذا لم تكن متأكداً مما إذا كان أي شيء في الدليل قابلاً للاستغناء عنه، فتوقف قبل الإزالة وقم بعمل نسخة احتياطية منفصلة أو احتفظ بالدليل. تشارك شجرة عمل Git بيانات المستودع مع شجرة عملها الرئيسية، ولكن لها عملية checkout وفهرس خاصان بها؛ وإزالة الـ checkout ليست عملية نسخ احتياطي عامة الغرض. وثائق Git لـ worktree
2. الاحتفاظ بالتغييرات التي تريد الإبقاء عليها
إذا كان العمل جاهزاً للاحتفاظ به في المستودع، فقم بعمل commit له على فرع شجرة العمل. راجع أولاً الحالة والفروقات (diff)، ثم جهّز فقط الملفات التي تنوي تضمينها وقم بعمل commit لها:
git diff
git add path/to/file
git commit -m "Describe the finished work"
أزل المسافة البادئة العرضية قبل git commit إذا كانت واجهة الأوامر (shell) لديك تتعامل معها بشكل غير متوقع؛ الصيغة النظيفة هي git commit -m "Describe the finished work". يحفظ الـ commit التغييرات في سجل Git، ولكن تأكد من وجوده على الفرع المطلوب قبل إزالة شجرة العمل.
إذا كانت التغييرات غير مكتملة، فقم بتخزين التعديلات المتتبعة والملفات غير المتتبعة مؤقتاً (stash) بدلاً من ذلك:
git stash push -u -m "Before removing finished worktree"
git stash list
يتضمن الخيار -u الملفات غير المتتبعة. لا يتم تضمين الملفات المتجاهلة، لذا احتفظ بأي تكوين محلي متجاهل، أو ملفات مُولدة، أو بيانات أخرى مطلوبة بشكل منفصل. تأكد من ظهور التخزين المؤقت (stash) الجديد في القائمة قبل المتابعة. تنتمي عناصر الـ stash إلى المستودع، ويمكنك لاحقاً تطبيق التغييرات المحفوظة من شجرة عمل أخرى باستخدام git stash apply stash@{0}؛ تحقق من رقم الإدخال أولاً، لأن عمليات الـ stash اللاحقة يمكن أن تغير ترتيب القائمة. قد يؤدي تطبيق الـ stash إلى حدوث تعارضات (conflicts)، لذا افحص النتيجة قبل حذف الـ stash. وثائق Git لـ stash
3. إزالة شجرة العمل النظيفة
بعد عمل commit للتغييرات التي تحتاجها أو حفظها في الـ stash، غادر الدليل المستهدف وشغّل أمر الإزالة من شجرة عمل أخرى في نفس المستودع. استخدم المسار الدقيق الذي أظهره أمر git worktree list:
cd "/path/to/main-repository"
git worktree remove "/path/to/finished-worktree"
git worktree list
تعد القائمة الثانية تأكيداً مفيداً على أن Git لم يعد يدرج مساحة العمل تلك. توضح وثائق Git أن أمر remove يقبل أشجار العمل النظيفة فقط بشكل افتراضي؛ حيث يمكن لملف غير متتبع أو تعديل على ملف متتبع أن يمنع الإزالة. وثائق Git لـ worktree
إذا أشارت عملية الإزالة إلى أن شجرة العمل ليست نظيفة، فلا تنتقل إلى git worktree remove --force إلا إذا كنت قد قررت أنه يمكن التخلص من كل ملف محلي متبقٍ. ارجع إلى شجرة العمل تلك، وافحص git status، واحتفظ بالملفات أو التغييرات المتبقية أولاً. على وجه الخصوص، لا يتضمن الـ stash الملفات المتجاهلة، وقد تحتوي الوحدة الفرعية (submodule) على تغييرات خاصة بها تتطلب اهتماماً منفصلاً.
إذا كنت قد حذفت المجلد بالفعل في Finder
إذا قمت بحذف دليل شجرة عمل مرتبطة خارج Git، فقد يظل سجلها الإداري موجوداً. من المستودع الرئيسي، شغّل git worktree list وتحقق مما إذا كان المسار المفقود مميزاً بالعلامة prunable. يوفر Git الأمر git worktree prune لإزالة سجلات أشجار العمل التي فُقدت أدلتها؛ وهو لا يستعيد ملفات المشروع المحذوفة. استخدمه فقط بعد التأكد من اختفاء الدليل بالفعل وأنك لست بحاجة إلى محتوياته. للتنظيف في المستقبل، استخدم git worktree remove حتى يقوم Git بتحديث بيانات metadata الخاصة بشجرة العمل كجزء من عملية الإزالة. وثائق Git لـ worktree
ينتهي التنظيف الآمن بإزالة مساحة العمل المنتهية، وإجراء commit أو stash لأي تغييرات قصدت الاحتفاظ بها، والاحتفاظ بشكل منفصل بأي ملفات محلية متجاهلة كنت بحاجة إليها. اترك شجرة العمل في مكانها كلما تعذر عليك التحقق من إمكانية الاستغناء عن محتوياتها المتبقية.
المصادر
Git - وثائق git-worktree — Git
Git - وثائق git-stash — Git