Git Push
آخر تحديث
يرفع git push الـ commits الموجودة على فرعك المحلي إلى نظيره البعيد (مثل GitHub). بمجرد ضبط الـ upstream لأحد الفروع، يكفي git push بسيط؛ أما أول دفعة لفرع جديد فتستخدم -u لإنشاء الفرع البعيد وإعداد التتبع، بحيث لا تحتاج عمليات الدفع والسحب اللاحقة إلى أي وسائط.
جرّب هذه الأوامر في ساحة الطرفية - صدفة حقيقية في متصفحك، دون الحاجة إلى تثبيت أي شيء.
الصياغة
| Command | What it does |
|---|---|
git push | يدفع الفرع الحالي إلى الـ upstream الخاص به |
git push -u origin feature | يدفع فرعًا جديدًا ويضبط الـ upstream |
git push origin main | يدفع إلى مستودع بعيد وفرع محددين |
git push --tags | يدفع كل الوسوم المحلية |
git push --force-with-lease | force push آمن بعد إجراء rebase |
الحالات الشائعة
| Goal | Command |
|---|---|
| دفع فرع جديد تمامًا | git push -u origin feature |
| الدفع بعد ضبط الـ upstream | git push |
| دفع وسم واحد | git push origin v1.0.0 |
| حذف فرع بعيد | git push origin --delete feature |
مثال عملي
| الخطوة | الأمر | النتيجة |
|---|---|---|
| 1 | git remote add origin <url> | يربط المستودع المحلي بالمستودع البعيد تحت الاسم origin |
| 2 | git push -u origin main | ينشئ main على المستودع البعيد ويضبطه ليكون الـ upstream لفرع main المحلي |
| 3 | git push | كل دفعة لاحقة على main لا تحتاج إلى أي وسائط |
الأسئلة الشائعة حول git push
ماذا يفعل git push؟
يرسل الـ commits الموجودة على فرعك المحلي وغير الموجودة على الفرع البعيد، ثم ينقل الفرع البعيد ليطابق فرعك. يرفع الـ commits فقط: التغييرات التي لم تُثبَّت في commit تبقى على جهازك، لذا نفّذ commit أولًا. وإذا كان على المستودع البعيد commits ليست لديك، يُرفض الدفع حتى تنفّذ pull أو rebase.
كيف أدفع فرعًا جديدًا إلى المستودع البعيد؟
شغّل
git push -u origin <branch>. الوسيط -u (اختصار لـ --set-upstream) ينشئ الفرع على المستودع البعيد ويربط فرعك المحلي به، بحيث يعمل بعدها git push وgit pull البسيطان دون وسائط. الفرع البعيد غير موجود حتى هذه الدفعة الأولى.لماذا يقول git push عبارة 'no upstream branch'؟
لأن فرعك المحلي غير مرتبط بعد بفرع بعيد. ادفعه باستخدام
git push -u origin <branch> لإنشاء الفرع البعيد وضبط الـ upstream. بعد ذلك يعرف git push وحده إلى أين يرسل الـ commits.كيف أدفع الوسوم؟
لا تُدفع الوسوم افتراضيًا. ادفع وسمًا واحدًا باستخدام
git push origin <tagname>، أو ادفعها جميعًا دفعة واحدة باستخدام git push --tags. هذه مزلقة شائعة - الوسم الذي أنشأته محليًا لن يظهر على المستودع البعيد حتى تدفعه صراحةً.كيف أنفّذ force push بأمان؟
بعد إعادة كتابة التاريخ (عبر rebase أو amend)، استخدم
git push --force-with-lease بدلًا من --force. فهو يستبدل المستودع البعيد فقط إذا لم يدفع أحد غيرك منذ آخر fetch لك، مما يحمي عمل زملائك في الفريق. راجع صفحة git force push للحصول على الشرح الكامل.ماذا يعني git push -u origin main؟
origin هو المستودع البعيد (راجع git remote)، وmain هو الفرع، و-u يضبط ذلك الفرع البعيد ليكون الـ upstream لفرع main المحلي. هذا هو الأمر الذي يعرضه GitHub لكل مستودع جديد: بعد تشغيله مرة واحدة، لا يحتاج git push وgit pull على main إلى أي وسائط.ما الفرق بين git push وgit pull؟
ينقلان الـ commits في اتجاهين متعاكسين. يرفع
git push الـ commits المحلية إلى المستودع البعيد، أما git pull فينزّل الـ commits الجديدة من المستودع البعيد ويدمجها في فرعك. إذا رُفض الدفع برسالة non-fast-forward فهذا يعني عادةً أنك تحتاج إلى pull أولًا. راجع git fetch مقابل pull لترى ما يفعله pull خلف الكواليس.هل يمكنني التدرب على هذا عبر الإنترنت؟
نعم. افتح ساحة الطرفية لتشغيل
git push في صدفة حقيقية داخل متصفحك - دون الحاجة إلى تثبيت أي شيء. كما يغطي مساق Git التفاعلي المجاني من Coddy العمل مع المستودعات البعيدة خطوة بخطوة.