Git Rebase
آخر تحديث
git rebase ينقل commits فرعك بحيث يُعاد تشغيلها فوق فرع آخر، منتجاً سجلاً مستقيماً وخطياً بدلاً من commit دمج. الـ rebase التفاعلي (-i) يذهب أبعد من ذلك، إذ يتيح لك دمج الـ commits وإعادة ترتيبها وتحريرها أو إسقاطها. ولأن الـ rebase يعيد كتابة الـ commits، لا تفعل ذلك إلا على عمل لم تشاركه بعد.
جرّب هذه الأوامر في ساحة الطرفية - صدفة حقيقية في متصفحك، دون الحاجة لتثبيت أي شيء.
الصيغة
| Command | What it does |
|---|---|
git rebase main | يعيد تشغيل commits الخاصة بك فوق main |
git rebase -i HEAD~3 | يحرّر آخر 3 commits تفاعلياً |
git rebase --onto main old new | ينقل نطاقاً من الـ commits إلى main |
git rebase --continue | يستأنف بعد حل التعارضات |
git rebase --abort | يلغي عملية الـ rebase ويستعيد الفرع |
git pull --rebase | يقوم بـ pull و rebase بدلاً من merge |
كلمات مفتاحية للـ rebase التفاعلي
في المحرر الذي يفتحه -i، غيّر pick إلى إحدى هذه الكلمات.
| Keyword | What it does |
|---|---|
pick | يُبقي الـ commit كما هو |
reword | يُبقي الـ commit ويحرّر رسالته |
squash | يدمجه في الـ commit السابق ويجمع الرسائل |
fixup | يدمجه لكنه يتجاهل هذه الرسالة |
drop | يزيل الـ commit بالكامل |
الأسئلة الشائعة حول git rebase
ماذا يفعل git rebase؟
يأخذ الـ commits الموجودة على فرعك الحالي ويعيد تشغيلها واحداً تلو الآخر فوق فرع آخر، كما لو أنك بدأت عملك من أحدث commit في ذلك الفرع. النتيجة سجل خطي بدون commit دمج. تُعاد كتابة الـ commits (تحصل على hashes جديدة) خلال هذه العملية.
ما هو الـ rebase التفاعلي؟
git rebase -i <base> يفتح محرراً يسرد الـ commits منذ <base>، حيث يمكنك إعادة ترتيبها، أو squash عدة منها في واحد، أو reword الرسائل، أو edit أحد الـ commits، أو drop لإسقاطه. إنه الأداة الرئيسية لتنظيف سلسلة فوضوية من الـ commits قبل مشاركتها.ما هي القاعدة الذهبية لإعادة التأسيس؟
لا تُجرِ أبداً rebase على commits بنى عليها آخرون عملهم بالفعل - وهي عادةً أي شيء تم دفعه (push) إلى فرع مشترك. ولأن الـ rebase يعيد كتابة الـ commits، فإن فعل ذلك يُجبر الجميع على التوفيق بين سجل متباعد. أجرِ الـ rebase بحرية على الـ commits المحلية غير المدفوعة؛ واستخدم merge أو revert للعامة منها.
كيف أُصلح أو ألغي عملية rebase بها تعارضات؟
عندما تتوقف عملية rebase عند تعارض، احلّ الملفات، ثم نفّذ لها
git add، ثم شغّل git rebase --continue. استخدم git rebase --skip لإسقاط الـ commit الحالي، أو git rebase --abort للإلغاء بالكامل وإعادة الفرع إلى ما كان عليه قبل بدء الـ rebase.هل يمكنني التدرب على هذا عبر الإنترنت؟
نعم. افتح ساحة الطرفية لتشغيل
git rebase في صدفة حقيقية داخل متصفحك - دون الحاجة لتثبيت أي شيء. كما يغطي كورس Git التفاعلي المجاني من Coddy إعادة التأسيس خطوة بخطوة.