تخطَّ إلى المحتوى
GitTree
شروحات Gitقراءة في 5 دقائق

git rebase لفرع: طريقة إعادة التأسيس بأمان خطوة بخطوة

تكفي إعادة التأسيس أمرًا واحدًا، أما إتمامها بأمان فيحتاج إلى خطوات قليلة أخرى: احفظ النهاية القديمة، وعالج كل تعارض، وقارن النتيجة، وادفع دون الكتابة فوق عمل زميلك. إليك الخطوات كاملة.

بقلم Kodmora

شركة البرمجيات المطوّرة لـGitTree

آخر تحديث
  • إعادة التأسيس
  • الفروع
  • تعارضات الدمج
  • المستودعات البعيدة والدفع
في هذه الصفحة

لإعادة تأسيس فرع، اجلب التحديثات، وانتقل إلى الفرع، ثم أعد تطبيقه على الأساس الجديد: `git fetch origin` ثم `git switch topic` ثم `git rebase origin/main`. يضع Git إيداعات فرعك جانبًا، وينقل الفرع إلى نهاية origin/main، ثم يعيد تطبيق الإيداعات واحدًا تلو الآخر. فيبقى السجل خطًا مستقيمًا دون إيداع دمج. ويحصل كل إيداع مُعاد تطبيقه على معرّف جديد، لذا يحتاج الفرع الذي دفعته من قبل إلى git push --force-with-lease بعدها.

ماذا يفعل git rebase بالفرع؟

لنفترض أن للفرع topic إيداعين خاصين به، وأن main اكتسب ثلاثة إيداعات منذ بدأ الفرع. تحدّث إعادة التأسيس نقطة البداية هذه دون دمج main في فرعك:

# before
A---B---C---D---E   origin/main
     \
      F---G         topic

# after git rebase origin/main
A---B---C---D---E   origin/main
                 \
                  F'---G'   topic

يحمل F' وG' التغييرات والرسائل نفسها التي في F وG، لكنهما إيداعان جديدان بمعرّفين جديدين لأن الأصل تغيّر. أما الدمج من نقطة البداية نفسها فيُبقي الخطين ويضيف إيداعًا له أصلان. ويعرض درس الدمج مقابل إعادة التأسيس الحالتين على رسم واحد.

كيف أعيد تأسيس فرع بأمان خطوة بخطوة؟

افحص أولًا، واحفظ النهاية القديمة، ثم أعد التطبيق، ثم اختبر. والأوامر الثلاثة الأولى لا تعيد كتابة شيء:

# 1. update origin/main, your files stay as they are
git fetch origin

# 2. list the commits Git will replay
git log --oneline origin/main..topic

# 3. keep a name on the old tip
git branch topic-backup topic

# 4. replay
git switch topic
git rebase origin/main

توقف عند الخطوة 2 إن ظهر في القائمة إيداع لا تعرفه، فذلك يعني أن الفرع لم يبدأ من حيث ظننت. وحين تنتهي إعادة التأسيس، نفّذ git status للتأكد من اكتمالها، ثم شغّل اختباراتك. فقد تُفسد إعادة تأسيس بلا تعارضات سلوك الشيفرة.

حدّد الأساس في كل مرة. فالأمر git rebase وحده يستخدم الفرع المتتبَّع، وهو غالبًا origin/topic لا main. ولنقل فرع بدأ من فرع ميزة آخر، حدّد الأساس القديم أيضًا: git rebase --onto main old-base topic. ويطبّق درس إعادة تأسيس العمل غير المنشور ذلك على رسم حقيقي.

كيف أعالج التعارضات في أثناء إعادة التأسيس؟

يطبّق Git إيداعاتك واحدًا تلو الآخر، فقد يتوقف أكثر من مرة حتى في الأسطر نفسها. عالج الإيداع الذي توقف عنده Git فقط، فالإيداعات التالية لم تُطبَّق بعد:

# edit the file and remove the conflict markers, then
git add path/to/file
git rebase --continue
الطرق الثلاث للتعامل مع توقف إعادة التأسيس
الأمرما يفعلهمتى تستخدمه
git rebase --continueيسجّل النتيجة المُجهّزة وينتقل إلى الإيداع التالي.حين يُحلّ التعارض وتُجهّز الملفات.
git rebase --skipيُسقط الإيداع الجاري تطبيقه.حين تتأكد أن التغيير موجود في الأساس بالفعل.
git rebase --abortيتوقف ويعيد الفرع إلى حيث كان.حين تختار أساسًا أو فرعًا خاطئًا، أو يحتاج التعارض إلى تفكير أكبر.

إن تكرر التعارض نفسه، فالأمر git config rerere.enabled true يسجّل حلّك ويعيد استخدامه. راجع كل نتيجة معاد استخدامها، فحلّ الأمس قد يكون خاطئًا في شيفرة اليوم. ويتناول درس المتابعة والتخطي والإيقاف كل حالة، ويشرح مقال حل تعارضات الدمج قراءة العلامات.

كيف أراجع إعادة التأسيس قبل الدفع؟

قارن السلسلة القديمة بالجديدة قبل أن يراها أي أحد:

# old and new commits, matched pair by pair
git range-diff origin/main topic-backup topic

# everything the branch adds to main, as one diff
git diff origin/main...topic

# the shape of the history
git log --graph --oneline --decorate origin/main topic

يبيّن git range-diff متى غيّر حل التعارض تصحيحًا، أو متى اختفى إيداع. فالشيفرة التي تُترجم بنجاح قد تُخفي اختبارًا محذوفًا أو شرطًا تغيّر، وهنا تكتشف ذلك.

كيف أتراجع عن إعادة التأسيس؟

في أثناء عملها، استخدم git rebase --abort. وبعد انتهائها، أعد الفرع إلى نهايته القديمة. راجع git status أولًا، لأن --hard يتجاهل التغييرات غير المودعة:

git reset --hard topic-backup

# no backup? find the old tip in the reflog
git reflog show topic
git reset --hard <old-tip-hash>

ويتناول دليل التراجع عن reset وrebase والإيداع سجل المراجع بتفصيل أكبر.

كيف أدفع فرعًا أُعيد تأسيسه؟

يُرفض الدفع العادي، لأن الفرع البعيد ما زال يحمل الإيداعات القديمة فيراه Git تحديثًا غير سريع للأمام. راجع ما ستستبدله، ثم ادفع مع lease:

git fetch origin
git log --oneline topic..origin/topic
git push --force-with-lease origin topic

ينبغي ألا يعرض git log سوى إيداعاتك القديمة. وأي شيء آخر هو عمل زميل، فتوقف وأدخله أولًا. يستبدل --force-with-lease الفرع البعيد فقط إن كان ما زال حيث رآه آخر جلب، أما --force العادي فبلا هذا الفحص. وعمليات الجلب في الخلفية تحدّث تلك القيمة، لذا يمكن للسكربتات تحديد الإيداع المتوقع: git push --force-with-lease=topic:<expected-hash> origin topic.

هل أعيد تأسيس هذا الفرع أم أدمجه؟

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

طريقة إعادة تأسيس فرع في GitTree

  1. اختر الأساس الجديد

    انتقل إلى فرعك، وانقر بزر الفأرة الأيمن الفرع الذي تريد عملك فوقه، مثل develop، واختر إعادة تأسيس … على ….

  2. راجع الخيارات

    يذكر التأكيد أن كل إيداع يُعاد تطبيقه بمعرّف جديد وأن الفرع القديم محفوظ. ويمكنك أيضًا تخبئة التغييرات المحلية وإعادتها.

  3. تابع كل خطوة

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

  4. راجع ما تغيّر

    يقارن ما الذي تغيّر… (Alt+D) الإيداعات قبل إعادة التأسيس وبعدها زوجًا بزوج، مثل git range-diff.

  5. ادفع أو تراجع

    استخدم دفع قسري آمن (with-lease)… لفرع موجود في المستودع البعيد. ويعيد تراجع الفرع إلى حيث كان، والإيداعات القديمة محفوظة تحت refs/ogt/trash.

خطوة متوقفة في GitTree: الجانبان والناتج، ومتابعة وإيقاف في الشريط.
خطوة متوقفة في GitTree: الجانبان والناتج، ومتابعة وإيقاف في الشريط.

يضم دليل إعادة تأسيس فرع كل الخيارات، ويغطي الدفع القسري الآمن خطوة الدفع. ولدمج الإيداعات أو إعادة صياغتها أو ترتيبها، اقرأ إعادة التأسيس التفاعلية في واجهة رسومية.

يعرض محرر إعادة التأسيس التفاعلية في GitTree كل إيداع سيُعاد تطبيقه قبل أن يتغير أي شيء.
يعرض محرر إعادة التأسيس التفاعلية في GitTree كل إيداع سيُعاد تطبيقه قبل أن يتغير أي شيء.

الأسئلة الشائعة

هل يفقدني git rebase تغييراتي؟

ليس من تلقاء نفسه. يعيد Git تطبيق تغييراتك في إيداعات جديدة. ويضيع العمل حين تُسقط إيداعًا، أو تنفّذ git rebase --skip، أو تحل تعارضًا حلًا خاطئًا. ويتجاوز Git أيضًا الإيداعات التي توجد تغييراتها في الأساس بالفعل.

ما الفرق بين git rebase --abort وسجل المراجع؟

يعمل git rebase --abort في أثناء إعادة التأسيس فقط. وبعد انتهائها، يحفظ سجل المراجع نهايات الفرع السابقة، فتعيد الفرع إلى إحداها.

هل يمكنني إعادة تأسيس فرع يحتوي على إيداعات دمج؟

نعم. يحتفظ بها git rebase --rebase-merges origin/main. ومن دون هذا الخيار يجعل Git الفرع مستقيمًا ويستبعد إيداعات الدمج.

لماذا يفشل git push بعد إعادة التأسيس؟

ما زال الفرع البعيد يحمل الإيداعات القديمة، وهي ليست في فرعك المُعاد كتابته. راجعها، ثم استخدم git push --force-with-lease origin topic.

هل أعيد التأسيس على main أم origin/main؟

استخدم origin/main بعد git fetch origin. فهو أحدث حالة منشورة، ولا تحتاج إلى تحديث main المحلي أولًا.

المصادر

تحققنا من المعلومات عن المنتجات الأخرى من صفحاتها الرسمية بتاريخ 7 نوفمبر 2026. الأسعار والميزات تتغير، وصفحات الشركات هي المرجع.