كان كل طلب ‘تعديل عاجل’ يفسد عملي: كيف أنقذني git worktree من جحيم الـ stash المفقود؟

يا مساء الخير يا جماعة،

خلوني أحكيلكم قصة صارت معي زمان، بس لليوم بتذكرها كأنها مبارح. كانت الساعة حوالي أربعة العصر يوم خميس، وأنا غرقان في كود لميزة جديدة ومعقدة في مشروع بنشتغل عليه. القهوة جنبي، والمزاج عال العال، وكنت على وشك إني أعمل commit لجزء كبير من الشغل اللي صارلي يومين بشتغل عليه. وفجأة… رنّة من مدير المشروع على Slack: “أبو عمر، يعطيك العافية، بس في عنا مشكلة طارئة على الـ production، في bug خطير لازم نحله هسّا ضروري!”.

قلبي وقع في رجلي. كيف “هسّا”؟ وشغلي اللي فاتحه قدامي؟ الملفات كلها معدّلة، والدنيا مخبوصة، نصه شغال ونصه لأ. طبعًا، أول إشي خطر في بالي هو المنقذ المعتاد: git stash. بسرعة وبدون تفكير، كتبت الأمر، وخبّيت كل شغلي في غياهب الـ stash، وعملت checkout للفرع الرئيسي عشان أحل المشكلة الطارئة.

صلّحت الـ bug، عملت push، وتنفست الصعداء. رجعت للفرع تبعي، وكتبت بكل ثقة: git stash pop. وهون بلشت الكارثة. طلعلي conflict في كل ملف تقريبًا! والأسوأ من هيك، لأني كنت مستعجل، كنت عامل stash لكم شغلة فوق بعض، وصرت مش عارف أي stash فيه الشغل الصح. ضيعت وقت أطول وأنا بحاول أصلح الكونفليكت وأتذكر “أنا شو كنت عامل هون؟” أكتر من الوقت اللي أخدته في حل المشكلة الطارئة. يومها حسيت بإحباط كبير وحكيت لحالي: “مستحيل، لازم يكون في طريقة أحسن من هيك!”.

وهي القصة يا جماعة، كانت بداية رحلتي لاكتشاف الأداة السحرية اللي غيرت طريقة شغلي تمامًا: git worktree.

ما هي مشكلة الـ stash أصلًا؟

قبل ما نحكي عن الحل، خلينا نفهم ليش الـ git stash، على الرغم من فائدته، ممكن يكون كابوس في بعض الأحيان. الـ stash مصمم لتخزين التغييرات المؤقتة اللي لسا مش جاهزة للـ commit، وهو بيعمل هالشغلة منيح. لكن المشكلة بتبلش لما نعتمد عليه في التنقل بين المهام الكبيرة والمعقدة.

  • إنه مجرد “كومة” (Stack): الـ stash بيشتغل بنظام LIFO (Last-In, First-Out). يعني آخر إشي خبيته هو أول إشي بتقدر ترجّعه. لو عندك أكتر من stash، راح تبلش تضيع بين stash@{0} و stash@{1}، وخصوصًا لو ما كنت كاتب رسالة توضيحية مع كل واحد.
  • صديق الكونفليكت (Conflicts): تطبيق stash معمول على فرع معين، على فرع ثاني مختلف تمامًا، هو وصفة شبه مؤكدة للكونفليكتس اللي بتوجع الراس.
  • النسيان: لو خبّيت شغلك ورجعتله بعد يومين، ممكن تنسى تمامًا شو السياق اللي كنت بتشتغل فيه. الـ stash بيفصلك عن بيئة عملك.
  • خطر الضياع: مع كتر الاستعجال، ممكن بالغلط تعمل git stash drop بدل pop، أو تنسى stash مهم موجود من زمان. باختصار، هو لا يُشعر بالأمان للمهام الكبيرة.

الضوء في نهاية النفق: تعرف على git worktree

في خضم إحباطي من حكاية الـ stash المفقود، قعدت أبحث وأقرأ، ووقعت عيني على مقالة بتحكي عن أمر اسمه git worktree. قرأت الوصف تبعه وحسيت كأني لقيت الكنز المفقود. الوصف كان بسيط ومبهر: “هي أداة تسمح لك بالعمل على عدة فروع من نفس المستودع (repository) في نفس الوقت، عن طريق إنشاء مجلدات عمل منفصلة لكل فرع”.

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

بالضبط! هذا هو سحر الـ worktree. كل worktree هو نسخة كاملة من ملفات مشروعك، لكنهم كلهم بيشاركوا نفس قاعدة بيانات Git (مجلد .git). هذا يعني أن التغييرات والـ commits في أي worktree بتنعكس على المستودع ككل.

كيف نبدأ مع الـ worktree؟ دليل عملي خطوة بخطوة

الكلام النظري حلو، بس خلينا نشوف التطبيق العملي. تخيلوا معي نفس السيناريو السابق: أنا شغال على فرع اسمه feature/user-profile في مجلد مشروعي ~/projects/my-app، وإجاني طلب تعديل عاجل لازم أعمله على فرع جديد اسمه hotfix/login-bug.

1. إنشاء Worktree جديد

بدل ما أعمل git stash، وأنا في مجلدي الأصلي، كل اللي علي أعمله هو إني أكتب هذا الأمر في الـ terminal:

git worktree add ../my-app-hotfix hotfix/login-bug

خلينا نحلل الأمر:

  • add: لإنشاء worktree جديد.
  • ../my-app-hotfix: هذا هو المسار والمجلد الجديد اللي راح يتم إنشاؤه. أنا بحب أحطه جنب مجلد المشروع الأصلي عشان التنظيم.
  • hotfix/login-bug: هذا هو اسم الفرع اللي بدي أعمل عليه checkout في المجلد الجديد. لو الفرع مش موجود، Git راح ينشئه لك من الفرع الحالي اللي أنت عليه.

النتيجة؟ Git أنشأ مجلد جديد اسمه my-app-hotfix، وداخله نسخة كاملة من المشروع عاملة checkout على الفرع hotfix/login-bug. ومجلدي الأصلي my-app بقي كما هو، مفتوح على فرع feature/user-profile بكل تغييراتي اللي لسا ما عملتلها commit.

2. العمل في الـ Worktree الجديد

الآن صارت المهمة سهلة جدًا. بفتح نافذة terminal جديدة، أو بفتح الـ IDE تبعي (مثل VS Code) على المجلد الجديد:

cd ../my-app-hotfix
code .

صار عندي نافذتين من الـ IDE مفتوحين، كل واحدة على مجلد وفرع مختلفين. في المجلد الجديد، بشتغل على حل المشكلة الطارئة براحتي، بعمل تعديلاتي، وبعمل commit و push كأني بشتغل في أي مشروع عادي.

# ... أعمل التعديلات اللازمة ...
git add .
git commit -m "Fix: Corrected the login validation logic"
git push origin hotfix/login-bug

خلصت المهمة الطارئة؟ ممتاز. برجع لنافذة الـ IDE الأولى وبكمل شغلي على ميزة الـ user profile وكأنه لم يحدث شيء!

3. إدارة وعرض الـ Worktrees

إذا نسيت شو في عندك worktrees مفتوحة، بكل بساطة اكتب:

git worktree list

راح يطلعلك نتيجة شبيهة بهاي:

/path/to/my-app         a1b2c3d [feature/user-profile]
/path/to/my-app-hotfix  e4f5g6h [hotfix/login-bug]

هذا بيورجيك كل worktree، وين مساره، وآخر commit عليه، وعلى أي فرع هو شغال.

4. تنظيف الأمور: إزالة الـ Worktree

بعد ما تخلص من مهمة الـ hotfix ويتم دمجها (merge) في الفرع الرئيسي، ما عاد في داعي للمجلد الإضافي. لإزالته، الموضوع بسيط جدًا:

git worktree remove my-app-hotfix

هذا الأمر بحذف الـ worktree من سجلات Git وبتقدر بعدها تحذف المجلد يدويًا بكل أمان. Git ذكي، فلو حاولت تحذف worktree وفي تغييرات مش معمولة commit، راح يرفض ويحميك من ضياع الشغل.

نصيحة: بعد ما تدمج فرع الـ hotfix، لا تنسى تحذفه من المستودع باستخدام git branch -d hotfix/login-bug عشان تحافظ على نظافة المستودع.

نصائح من “أبو عمر” لاستخدام الـ worktree كالمحترفين

من يوم ما اكتشفت الـ worktree، صار جزء لا يتجزأ من شغلي اليومي. وهي شوية نصائح من تجربتي:

  • استخدمه لمراجعة الكود (Code Reviews): لما زميلك يطلب منك تراجع Pull Request، بدل ما تعمل checkout للفرع تبعه وتخبّص شغلك، أنشئ worktree جديد للفرع تبعه. راجع الكود، جرب التغييرات، وبعد ما تخلص احذف الـ worktree.
  • لتشغيل الاختبارات الطويلة: لو عندك اختبارات بتاخد وقت طويل (End-to-End tests)، بتقدر تعمل worktree مخصوص عشان تشغل عليه الاختبارات، وبنفس الوقت تكمل شغلك في الـ worktree الرئيسي بدون ما تستنى.
  • اتبع تسمية موحدة: عشان ما تضيع، حاول تتبع نمط معين في تسمية مجلدات الـ worktree، مثل ../-.
  • احذر من مساحة التخزين: تذكر أن كل worktree هو نسخة من ملفات المشروع. إذا كان مشروعك حجمه بالجيجابايت (مثل مشاريع الألعاب أو البيانات الضخمة)، قد يكون لهذا تأثير على مساحة القرص الصلب. لكن لمعظم مشاريع الويب والتطبيقات، الأمر لا يكاد يذكر.

الخلاصة: من الفوضى إلى النظام بـ 3 أوامر بسيطة 🙏

رحلتي من جحيم الـ stash المفقود إلى نعيم الـ git worktree المنظم علمتني درس مهم: دائمًا في أداة أفضل وطريقة أذكى لإنجاز العمل. الـ git worktree حوّل لحظات الضغط والطلبات العاجلة من مصدر للفوضى والإحباط إلى مجرد مهمة جانبية منظمة لا تؤثر على سير عملي الأساسي.

جربوها يا جماعة، ومش راح تندموا. خلوا الـ stash للأمور البسيطة والسريعة جدًا، مثل حفظ تغيير بسيط عشان تعمل pull للتحديثات. لكن لأي شيء يتطلب تبديل سياق العمل بشكل كامل، مثل حل bug طارئ أو العمل على ميزة أخرى بالتوازي، فإن git worktree هو صديقكم الوفي. صدقوني، صحتكم النفسية وإنتاجيتكم كمطورين راح تشكركم.

يلا، روحوا جربوها وخبروني بالنتائج!

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

التوظيف وبناء الهوية التقنية

كانت إجاباتي كارثية: كيف أنقذني أسلوب STAR من جحيم ‘أممم… لا أعرف’ في المقابلات؟

من مبرمج فلسطيني كاد أن يفقد وظيفة أحلامه بسبب المقابلات السلوكية، إلى خبير يشاركك خلاصة تجربته. اكتشف معي أسلوب STAR الذي حوّل إجاباتي من الفوضى...

22 مايو، 2026 قراءة المزيد
التوسع والأداء العالي والأحمال

نمط قاطع الدائرة (Circuit Breaker): الطفاية التي أخمدت حريق الأعطال المتتالية في نظامنا

أشارككم قصة حقيقية من قلب المعركة البرمجية، كيف أنقذنا نظامنا من الانهيار التام بسبب فشل خدمة واحدة باستخدام نمط تصميم بسيط وقوي يُدعى "قاطع الدائرة"...

22 مايو، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

كانت تطبيقاتنا المالية جزرًا معزولة: كيف أنقذتنا واجهات Open Banking (PSD2) من جحيم تجربة المستخدم؟

بصفتي مطور برمجيات، عانيت طويلًا من عزلة البيانات المالية في البنوك التقليدية. تروي هذه المقالة كيف حررت واجهات البنوك المفتوحة (Open Banking) البيانات، ومكّنت المطورين...

22 مايو، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

من شكاوى المستخدمين إلى لوحات المراقبة: كيف أنقذنا Prometheus وGrafana من كابوس ‘الموقع لا يعمل’؟

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

22 مايو، 2026 قراءة المزيد
ادارة الفرق والتنمية البشرية

كانت اجتماعاتنا الفردية مضيعة للوقت: كيف أنقذنا نموذج ‘الموقف-السلوك-التأثير’ (SBI) من جحيم المحادثات السطحية؟

أشارككم تجربتي كقائد فريق تقني، وكيف حوّلنا اجتماعاتنا الفردية (1-on-1s) من لقاءات سطحية ومملة إلى محادثات بنّاءة ومثمرة باستخدام نموذج التغذية الراجعة البسيط والفعّال (الموقف-السلوك-التأثير)....

22 مايو، 2026 قراءة المزيد
​معمارية البرمجيات

ذاكرة الفريق هي التوثيق الوحيد: كيف أنقذتنا ‘سجلات القرارات المعمارية’ (ADRs) من جحيم “لماذا فعلنا ذلك؟”

أشارككم قصة حقيقية عن ضياع المعرفة في فريقنا وكيف تحولت 'سجلات القرارات المعمارية' (ADRs) إلى منقذنا. اكتشفوا كيف يمكن لهذه الأداة البسيطة أن تنهي جحيم...

22 مايو، 2026 قراءة المزيد
البودكاست