Git Force Push
آخر تحديث
يُرفض git push العادي عندما يتباعد فرعك المحلي عن البعيد - فلن يطمس Git كوميتات ربما لم ترها. يتجاوز الدفع القسري هذا الفحص ويجعل الفرع البعيد مطابقًا لفرعك المحلي. تحتاج إليه بعد إعادة كتابة التاريخ (rebase أو amend)، لكنه قد يمحو كوميتات الآخرين، لذا استخدم الأكثر أمانًا --force-with-lease.
جرّب هذه في ساحة الطرفية - صدفة حقيقية في متصفحك، ولا شيء لتثبيته.
الصياغة
| Command | What it does |
|---|---|
git push --force | يطمس الفرع البعيد، بدون فحص أمان |
git push -f | الصيغة المختصرة لـ --force |
git push --force-with-lease | يفرض فقط إذا لم يدفع أحد آخر في هذه الأثناء |
git push --force-with-lease origin feature | دفع قسري أكثر أمانًا إلى فرع مُسمّى |
--force vs --force-with-lease
| Behavior | --force | --force-with-lease |
|---|---|---|
| يطمس البعيد | دائمًا | فقط إذا لم يتغيّر منذ آخر fetch لك |
| قد يمحو كوميتات الآخرين | نعم | يرفض، إلا إذا جدّدت عملية fetch الـ lease |
| مُوصى به للفِرق | لا | نعم |
الأسئلة الشائعة حول git force push
متى أحتاج إلى الدفع القسري؟
عندما تكون قد أعدت كتابة تاريخ موجود بالفعل على البعيد - بعد
git rebase أو git commit --amend أو rebase تفاعلي دمج الكوميتات. لم يعد فرعك المحلي مطابقًا لتاريخ البعيد، لذا يُرفض الدفع العادي ولا يمكن تحديثه إلا بدفع قسري.ما الفرق بين --force و --force-with-lease؟
--force يطمس الفرع البعيد دون شرط، وهو ما قد يحذف بصمت كوميتات دفعها زميل بعد آخر fetch لك. --force-with-lease يطمس فقط إذا كان البعيد ما زال عند الكوميت الذي رأيته آخر مرة - وإذا دفع شخص آخر في هذه الأثناء، فإنه يرفض ويحمي عمله. تنبيه واحد: أي fetch (بما في ذلك الجلب التلقائي الذي تجريه بيئة التطوير في الخلفية) يجدّد الـ lease، لذا ادفع مباشرة بعد تحققك من البعيد. ومع ذلك يبقى مفضّلًا على --force على أي فرع مشترك.هل الدفع القسري خطير؟
قد يكون كذلك. على فرع مشترك، قد يطمس
--force البسيط كوميتات دفعها آخرون، ما يحذف عملهم فعليًا من البعيد. إنه آمن على فرع تستخدمه أنت وحدك. عند الشك، استخدم --force-with-lease الذي يفشل بأمان بدلًا من طمس تغييرات لم ترها.كيف أتراجع عن دفع قسري؟
إذا كانت الكوميتات القديمة ما زالت لديك محليًا أو في
git reflog، يمكنك إعادة ضبط فرعك إليها ثم الدفع القسري مجددًا لاستعادة الحالة السابقة. هذا سبب إضافي لاستخدام --force-with-lease - فهو يجعل الطمس العَرَضي أقل احتمالًا بكثير من البداية.هل يمكنني التدرّب على هذا عبر الإنترنت؟
نعم. افتح ساحة الطرفية لتشغيل أوامر git push في صدفة حقيقية في متصفحك - ولا شيء لتثبيته. كما يغطي كورس Git التفاعلي المجاني من Coddy العمل مع المستودعات البعيدة خطوة بخطوة.