ارجع لمشكلة الفصل اللي فات: إنت في نص feature، وجالك bug لازم يتصلح حالًا. الـ stash حل، بس:
- لازم تشيل شغلك وترجعه.
- لو الـ dev server شغال، كل
switchبيغيّر الملفات تحته. - ولو الـ feature محتاجة
pnpm installمختلف، هتعيده كل مرة.
الـ worktree بيدّيك فولدر تاني على نفس الـ repo، وعليه branch تاني. الاتنين شغالين في نفس الوقت، وكل واحد ملفاته لوحده.
إزاي بيشتغل
الـ repo العادي فيه فولدر شغل واحد (working tree)، وفولدر .git فيه التاريخ. الـ worktree بيضيف فولدر شغل تاني بيشارك نفس الـ .git. يعني نفس الـ commits، ونفس الـ branches، ونفس الـ remote، من غير ما تعمل clone تاني.
~/code/├── atelier/ # الـ worktree الأساسي، على feature/cart│ └── .git/ # التاريخ كله هنا└── atelier-hotfix/ # worktree تاني، على hotfix/price └── .git # ملف صغير بيشاور على atelier/.gitالأوامر
# فولدر جديد على branch جديد من maingit worktree add -b hotfix/price ../atelier-hotfix main# فولدر جديد على branch موجودgit worktree add ../atelier-review feature/admin# كل الـ worktreesgit worktree list# /home/me/code/atelier a3f9c21 [feature/cart]# /home/me/code/atelier-hotfix 7b2e014 [hotfix/price]# خلصت؟ امسحهgit worktree remove ../atelier-hotfix# لو مسحت الفولدر بإيدك، نضّف السجلgit worktree prune
سيناريو الـ hotfix كله:
git worktree add -b hotfix/price ../atelier-hotfix maincd ../atelier-hotfixpnpm install# صلّح، واعمل commit، و push، وافتح pull requestcd ../ateliergit worktree remove ../atelier-hotfix
وفي الوقت ده كله، الـ feature بتاعتك في atelier زي ما هي، والـ dev server بتاعها لسه شغال.
قاعدة: branch واحد في worktree واحد بس
Git مش هيرضى تفتح نفس الـ branch في اتنين worktrees. لو feature/cart مفتوح في atelier، مش هتقدر تعمل git switch feature/cart في atelier-hotfix. ده عشان الاتنين ميعملوش commits على نفس الـ branch في نفس الوقت ويبوّظوا بعض.
حاجات هتقابلك
- الملفات اللي برا Git مش بتتنسخ:
node_modules، و.env.local، والـ build. لازمpnpm installوتنسخ ملف الـ env بنفسك. - الـ ports: لو الاتنين شغّلوا dev server، ادّي كل واحد port مختلف.
- الداتابيز المحلية: لو الاتنين بيعملوا migrations على نفس الداتابيز، هيلخبطوا بعض.
- pnpm بيساعد: الـ store بتاعه مشترك على الجهاز، فالـ
installفي worktree جديد سريع وبياخد مساحة قليلة.
إمتى تستخدمه؟
- hotfix وإنت في نص feature.
- مراجعة pull request: افتحه في worktree، وشغّله، وجرّبه، من غير ما تلمس شغلك.
- تقارن نسختين: الـ branch القديم والجديد شغالين جنب بعض.
- AI agents: لو بتشغّل كذا agent زي Claude Code في نفس الوقت، كل واحد في worktree على branch، فميعدّلوش نفس الملفات. ده متشرح بالتفصيل في موضوع Claude Code.
لشغل هترجعله كمان شوية، وفي نفس الفولدر. سريع، بس لازم تشيل وترجّع.
لما محتاج branch تاني شغال في نفس الوقت، أو لفترة أطول. مفيش شيل ولا رجوع.