Git worktree = امتلاك عدة مجلدات عمل لـ نفس المستودع.
المفهوم:
تشبيه: كأن لديك عدة مكاتب للمشروع نفسه.
مشكلة كلاسيكية:
# تعمل على feature-A
git checkout feature-A
# شفرة، شفرة، شفرة... (عمل غير منتهٍ)
# طارئ: خطأ على main!
git stash # حفظ العمل الجاري
git checkout main # التبديل إلى main
# إصلاح الخطأ...
git checkout feature-A # العودة إلى عملك
git stash pop # استرجاع العمل الجاريحل worktree:
# تعمل على feature-A في المجلد الرئيسي
# طارئ؟ أنشئ مجلداً جديداً لـ main!
git worktree add ../hotfix main
# الآن:
# - ./ → feature-A (عملك يتواصل)
# - ../hotfix → main (للإصلاح العاجل)المزية: لا stash ولا تبديل. مجرد مجلدين ومهمتين متوازيتين!
mkdir demo-worktree && cd demo-worktree
git init
echo "print('main v1')" > app.py
git add . && git commit -m "Main version"
# إنشاء فرع ميزة
git checkout -b feature-new
echo "print('feature work')" > feature.py
git add . && git commit -m "Feature work"
git checkout main# إنشاء worktree لـ feature-new
git worktree add ../feature-work feature-new
# إنشاء worktree لفرع جديد
git worktree add ../hotfix-branch -b hotfix
# عرض كل الـ worktrees
git worktree listdemo-worktree/ → main branch
../feature-work/ → feature-new branch
../hotfix-branch/ → hotfix branch (nouvelle)# الطرفية 1: المجلد الرئيسي (main)
cd demo-worktree
echo "print('main updated')" >> app.py
git add . && git commit -m "Update main"
# الطرفية 2: عمل الميزة
cd ../feature-work
echo "print('feature complete')" >> feature.py
git add . && git commit -m "Complete feature"
# الطرفية 3: الإصلاح العاجل
cd ../hotfix-branch
echo "print('urgent fix')" > fix.py
git add . && git commit -m "Critical fix"سحر: 3 فروع، 3 مجلدات، صفر تبديل سياق!
| الأمر | الإجراء |
|---|---|
git worktree add <path> <branch> | إنشاء worktree على فرع موجود |
git worktree add <path> -b <new-branch> | إنشاء worktree + فرع جديد |
git worktree list | عرض كل الـ worktrees |
git worktree remove <path> | حذف worktree |
git worktree prune | تنظيف الـ worktrees المحذوفة |
1. إصلاح عاجل:
git worktree add ../hotfix main
cd ../hotfix && echo "fix" > fix.py
git add . && git commit -m "Hotfix"
git push origin main2. مراجعة طلب سحب:
git worktree add ../pr-review pr-branch
cd ../pr-review # اختبر طلب السحب دون إزعاج عملك3. مقارنة فروع:
git worktree add ../version-a branch-a
git worktree add ../version-b branch-b
# قارن الملفات بين ../version-a و ../version-bgit worktree remove ../feature-work
git worktree remove ../hotfix-branch
git worktree prune # تنظيف المراجعWorktree = تعدّد مهام Git بلا تنازلات!