git push

المشاركة والتحديث

تحديث المراجع البعيدة مع الكائنات المرتبطة بها


يرفع الأمر 'git push' محتوى المستودع المحلي إلى مستودع بعيد. ينقل الـ commits وتحديثات الفروع (والوسوم حين تطلبها بـ ‎--tags أو ‎--follow-tags) من مستودعك المحلي إلى مستودع بعيد، فتصبح تغييراتك متاحة للآخرين. الدفع هو طريقتك في مشاركة العمل - بعد الحفظ محليًا، تدفع لتتزامن مع فريقك. افتراضيًا (push.default=simple)، لا يحدّث git push إلا فرع الـ upstream للفرع الحالي، الذي يجب أن يكون موجودًا وبالاسم نفسه، وفقط إن كان التحديث fast-forward (أي أن الفرع البعيد سلف لفرعك المحلي).

الصيغة

git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [-f | --force] [-d | --delete] [--prune] [-q | --quiet] [-v | --verbose] [-u | --set-upstream] [-o <string>] [--force-with-lease[=<refname>[:<expect>]] [--force-if-includes]] [--no-verify] [<repository> [<refspec>...]]
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

انقر على أي خيار لتوسيعه

مبتدئ (7)

المستودع البعيد الذي يُدفع إليه. إن لم يُحدَّد، يستخدم Git المستودع البعيد المضبوط للفرع الحالي (الـ upstream الخاص به)، وإلا فـ 'origin'. يمكن أن يكون عنوان URL أو اسم مستودع بعيد.

عند الحاجةيسمّي المستودع البعيد المستهدف صراحةً؛ وإلا يُستخدم مستودع الـ upstream

مثال

git push origin main

لكل فرع محدَّث أو مدفوع بنجاح، أضف مرجع upstream (تتبّع). يتيح لك هذا استخدام 'git push' و'git pull' دون وسائط لهذا الفرع لاحقًا.

موصى بهيُضبط مرة واحدة على فرع جديد؛ ثم يعمل push وpull العاديان

مثال

git push -u origin feature-branch

ادفع كل الفروع إلى المستودع البعيد: كل فرع تحت refs/heads/ يذهب إلى الفرع البعيد الذي يحمل الاسم نفسه. منذ Git 2.41 يُكتب أيضًا ‎--branches. لا تُضمَّن الوسوم، ولا يمكن جمعه مع refspecs أخرى.

عند الحاجةيدفع كل فرع محلي، بما فيها التجارب التي أردت إبقاءها خاصة

مثال

git push --all origin

ادفع كل المراجع تحت refs/tags إضافةً إلى الـ refspecs في سطر الأوامر. تُدفع كل الوسوم المحلية إلى المستودع البعيد.

عند الحاجةيدفع كل الوسوم المحلية، بما فيها الشاردة أو الخفيفة

مثال

git push --tags origin

نفّذ كل شيء عدا إرسال التحديثات فعلًا. يعرض ما سيُدفع دون أي تغيير في المستودع البعيد.

عند الحاجةيعاين ما سيُدفع؛ ولا يزال hook الـ pre-push يعمل

مثال

git push --dry-run origin main

شغّل بتفصيل. يقدّم مخرجات إضافية عمّا يُدفع وتقدّم العملية.

عند الحاجةتفاصيل أكثر عند تصحيح الدفع

مثال

git push -v origin main

أخفِ كل المخرجات، بما فيها قائمة المراجع المحدَّثة، ما لم يقع خطأ. لا يُعرض التقدّم.

عند الحاجةللسكربتات؛ لا مخرجات إلا عند الأخطاء

مثال

git push -q origin main

متوسط (6)

تُحذف كل المراجع المذكورة من المستودع البعيد. يعادل وضع نقطتين قبل كل مرجع (مثل ‎:branch-name).

عند الحاجةيزيل فرعًا بعيدًا بعد الدمج؛ ولا يمكن التراجع عنه من المستودع البعيد

مثال

git push --delete origin feature-old

عادةً يرفض الأمر تحديث مرجع بعيد ليس سلفًا للمرجع المحلي الذي سيكتب فوقه. هذا الخيار يعطّل هذه الفحوص ويسمح بتحديثات non-fast-forward. قد يفقد المستودع البعيد commits بسبب ذلك؛ استخدمه بحذر.

غير موصى بهيكتب فوق المستودع البعيد عشوائيًا — استخدم ‎--force-with-lease بدلًا منه

مثال

git push --force origin feature-branch

بديل أكثر أمانًا لـ ‎--force. يسمح هذا الخيار بالدفع بالإجبار لكنه يتحقق أولًا أن أحدًا غيرك لم يحدّث المرجع البعيد منذ آخر fetch لك. إن تغيّر البعيد يُرفض الدفع، فيمنعك من الكتابة فوق عمل غيرك بالخطأ. تتم المقارنة بفرع التتبّع البعيد، لذا فإن أي fetch (حتى الخلفي) دون دمج يعيد ضبط الفحص؛ اجمعه مع ‎--force-if-includes.

موصى بهالطريقة الآمنة لدفع تاريخ أُعيدت كتابته؛ ويرفض إن تحرك المستودع البعيد

مثال

git push --force-with-lease origin feature-branch

أرسل النص المعطى إلى الخادم الذي يمرّره إلى hooks الـ pre-receive والـ post-receive. يمكن تكراره لإرسال عدة خيارات. مفيد لتشغيل سلوكيات CI/CD أو تمرير بيانات وصفية.

عند الحاجةيرسل خيارات خاصة بالخادم (مثل تلميحات CI) تفهمها منصة الاستضافة

مثال

git push -o ci.skip origin main

أزل الفروع البعيدة التي لا نظير محليًا لها. لا ينطبق إلا على المراجع المطابقة لـ refspec فيه حرف بدل (أو ‎--all): مع 'git push --prune origin' وحده لا يُحذف شيء. يحذف الفروع البعيدة بلا رجعة، فعاين أولًا بـ ‎--dry-run.

غير موصى بهيحذف الفروع البعيدة الغائبة محليًا؛ ونسخة قديمة واحدة قد تمحو عمل الزملاء

مثال

git push --all --prune origin

بدل تسمية كل مرجع يُدفع، يحدد أن كل المراجع تحت refs/ (بما فيها، لا حصرًا، refs/heads/ وrefs/remotes/ وrefs/tags/) تُنسخ كمرآة إلى المستودع البعيد. تُدفع المراجع المحلية الجديدة، وتُحدَّث المعدّلة محليًا بالإجبار، وتُزال المحذوفة. عمليًا يدفع كل مرجع بالإجبار ويحذف المراجع البعيدة غير الموجودة محليًا.

غير موصى بهيحدّث كل مرجع على المستودع البعيد بالإجبار ويحذفه؛ فقط للنسخ الاحتياطي أو النقل

مثال

git push --mirror origin

متقدم (11)

تخطَّ hook الـ pre-push. افتراضيًا يشغّل git push الـ hook إن وُجد. يتجاوز هذا الخيار ذلك الفحص المحلي (وتبقى hooks الخادم تعمل). استخدمه باعتدال، فـ hooks الـ pre-push تفرض عادةً فحوصًا مهمة مثل تشغيل الاختبارات.

غير موصى بهيتخطّى فحوص pre-push؛ فقط عندما يوقف hook معطّل الدفع

مثال

git push --no-verify origin main

وقّع طلب الدفع الذي يحدّث المراجع لدى المستقبِل بـ GPG. يتيح هذا للخادم التحقق من هوية الدافع. يتطلب مفاتيح GPG مضبوطة، ويجب أن يدعم الخادم الدفع الموقّع - وإلا فشل الدفع ('the receiving end does not support --signed push'). ويمكن ضبطه أيضًا على 'true' أو 'false' أو 'if-asked' (التوقيع فقط إن دعمه الخادم).

عند الحاجةيوقّع الدفع بـ GPG؛ ويفشل ما لم يدعم الخادم الدفع الموقّع

مثال

git push --signed origin main

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

عند الحاجةالكل أو لا شيء عند دفع عدة مراجع مترابطة معًا

مثال

git push --atomic origin main develop

ادفع كل المراجع التي ستُدفع دون هذا الخيار، وادفع أيضًا الوسوم المشروحة في refs/tags الغائبة عن البعيد والتي تشير إلى commits يمكن الوصول إليها من المراجع المدفوعة. يمكن جعله افتراضيًا بإعداد push.followTags.

موصى بهيدفع وسوم الإصدارات الموصوفة على الـ commits المدفوعة، متخطيًا الخفيفة

مثال

git push --follow-tags origin main

هذا الخيار بديل للوسيط <repository>. إن حُدّد الاثنان فالأولوية لوسيط سطر الأوامر. يمكن استخدامه في السكربتات أو الإعدادات لتحديد المستودع الهدف صراحةً.

عند الحاجةنادرًا ما تحتاجه؛ يعادل إعطاء وسيط المستودع

مثال

git push --repo=origin main

حسّن النقل بإرسال حزمة «خفيفة» تسجّل الكائنات كفروقات مقارنةً بكائنات غير مضمّنة في الحزمة لتقليل حركة الشبكة. هذا هو السلوك الافتراضي.

عند الحاجةهو الافتراضي أصلًا؛ لا تحتاج أبدًا إلى كتابته

مثال

git push --thin origin main

عطّل تحسين الحزم «الخفيفة». يرسل حزمة كاملة دون الاعتماد على كائنات قد تكون موجودة لدى المستقبِل. قد يفيد في تصحيح مشكلات النقل.

عند الحاجةفقط لحل مشكلات نقل الحزم

مثال

git push --no-thin origin main

افرض عرض التقدّم على مجرى الخطأ القياسي حتى لو لم يكن متصلًا بطرفية. مفيد في السكربتات التي تريد فيها رؤية تقدّم الدفع.

عند الحاجةيفرض إظهار التقدّم في السجلات أو CI حيث لا يكون stderr طرفية

مثال

git push --progress origin main

لا تفرض التحديث إلا إن كان رأس مرجع التتبّع البعيد مدمجًا محليًا. دفع بالإجبار أكثر أمانًا يضمن أنك دمجت فعلًا أي commits بعيدة جديدة في عملك قبل الكتابة فوقها. لا أثر له إلا مع ‎--force-with-lease (دون قيمة متوقعة صريحة).

موصى بهأضفه إلى ‎--force-with-lease حتى لا يتجاوز fetch في الخلفية الشرط

مثال

git push --force-with-lease --force-if-includes origin feature

أنتج مخرجات قابلة للقراءة آليًا. يكون سطر الحالة لكل مرجع مفصولًا بعلامات جدولة ويُرسل إلى stdout بدل stderr. مفيد للسكربتات التي تحلّل نتائج الدفع.

عند الحاجةنتائج قابلة للقراءة آليًا للسكربتات

مثال

git push --porcelain origin main

تحكّم في طريقة التعامل مع الوحدات الفرعية أثناء الدفع. القيم: 'check' (يفشل إن لم تُدفع commits الوحدات الفرعية)، 'on-demand' (يدفع commits الوحدات الفرعية عند الحاجة)، 'only' (يدفع الوحدات الفرعية فقط)، 'no' (دون تكرار).

عند الحاجةيتأكد من دفع commits الوحدات الفرعية أولًا

مثال

git push --recurse-submodules=on-demand origin main

اختيار الخيار المناسب

سلّم أمان الدفع بالإجبار

حين تحتاج إلى الكتابة فوق التاريخ البعيد، اختر أكثر خيار آمن يناسب حالتك

الأمرمستوى الخطريتحقق من البعيدمتى يفشلحالة الاستخدام
git pushآمن✓ fast-forward فقطإن كانت في البعيد commits جديدةسير العمل اليومي المعتاد
git push --force-with-lease --force-if-includesأكثر الإجبار أمانًا✓ رأس البعيد ضمن التاريخ المحليإن لم تكن دمجت التغييرات البعيدةبعد rebase حين يكون آخرون قد دفعوا
git push --force-with-leaseإجبار أكثر أمانًا✓ البعيد لم يتغيّر منذ fetchإن تغيّر البعيد منذ آخر fetchبعد rebase على فرع شخصي
git push --forceخطير✗ يكتب فوق البعيد دون تحققأبدًا (إلا إن رفضه الخادم)فقط حين تكون متأكدًا، أو على فرع لك وحدك

ما الذي يُدفع

التحكم في نطاق ما ترسله إلى المستودع البعيد

الأمريدفعيشمل الوسومالاستخدام المعتاد
git push origin mainفرع واحد✗دفع فرع محدد
git push -u origin branchفرع واحد + يضبط التتبّع✗أول دفع لفرع جديد
git push --allكل الفروع✗مزامنة كل الفروع المحلية
git push --tagsالوسوم فقط (دون فروع)✓ كل الوسومدفع وسوم الإصدارات
git push --follow-tagsالفرع الحالي✓ المشروحة القابلة للوصول فقطالدفع مع وسوم الإصدار المعنية
git push --mirrorكل شيء✓ الكلنسخة مطابقة على البعيد (يحذف المراجع الموجودة على البعيد فقط)

المخرجات والإفادة

التحكم في مستوى التفصيل وتنسيق المخرجات حسب حاجتك

الأمرمستوى المخرجاتيُظهر التقدّمقابل للتحليل آليًاالأنسب لـ
git pushعاديفي الطرفية فقط✗الاستخدام التفاعلي المعتاد
git push --verboseمفصّل✓✗تصحيح مشكلات الدفع
git push --quietالأخطاء فقط✗✗السكربتات، خطوط CI
git push --progressعادي + تقدّم إجباري✓ دائمًا✗سكربتات تحتاج إلى التقدّم في السجلات
git push --porcelainمنظّم✗✓ مفصول بعلامات جدولةتحليل نتائج الدفع في السكربتات

الأمان والتحقق

فحوص ما قبل الدفع وخيارات التحقق

الأمريشغّل الـ hooksيتحققينشئ commitمتى تستخدمه
git push✓ pre-pushالبعيد يقبلN/Aسير العمل المعتاد
git push --dry-run✓ pre-pushما الذي سيحدث✗ معاينة فقطقبل الدفعات المهمة
git push --atomic✓كل المراجع أو لا شيءالكل أو لا شيءدفع عدة فروع معًا
git push --no-verify✗ يتخطّى pre-push المحلي (hooks الخادم ما زالت تعمل)البعيد يقبلN/Aحالة طارئة حين تمنعك الـ hooks
git push --signed✓توقيع GPGموقّع تشفيريًامستودعات عالية الأمان، إثبات الهوية

إدارة المستودعات البعيدة والفروع

خيارات لإدارة المراجع البعيدة وعلاقات الفروع

الأمرالإجراءيؤثر في البعيدحالة الاستخدام
git push -u origin branchدفع + تعيين الـ upstreamيضيف فرعًاأول دفع، يضبط التتبّع
git push origin --delete branchحذف فرع بعيديزيل الفرعتنظيف الفروع المدموجة
git push --pruneاحذف الفروع البعيدة التي حذفتها محليًا (يحتاج إلى ‎--all أو refspec فيه حرف بدل)يزيل فروعًامزامنة الحذف مع البعيد
git push --repo=<url>الدفع إلى مستودع بعيد محددالمستودع البعيد الهدفالدفع إلى عنوان URL بعيد بديل

أمثلة على سير العمل

1
git remote add origin https://github.com/user/repo.git

أضف عنوان المستودع البعيد

2
git push -u origin main

ادفع الفرع main واجعله يتتبّع origin/main

1
git status

تحقّق أنك على الفرع الصحيح وأن لديك commits للدفع

2
git push

ادفع إلى فرع الـ upstream المتتبَّع

1
git checkout feature

انتقل إلى فرع ميزتك

2
git rebase main

أعد التأسيس على main (يعيد كتابة تاريخ الـ commits)

3
git push --force-with-lease

ادفع بالإجبار بأمان - يفشل إن دفع شخص آخر

1
git checkout -b feature/new-login

أنشئ الفرع الجديد وانتقل إليه

2
git add . && git commit -m "Add new login"

أجرِ تغييراتك واحفظها في commit

3
git push -u origin feature/new-login

ادفع واضبط تتبّع الـ upstream

1
git push origin --delete feature/old-branch

احذف الفرع البعيد

2
git branch -d feature/old-branch

احذف الفرع المحلي أيضًا

1
git push --all origin

ادفع كل الفروع تحت refs/heads/

2
git push --tags origin

ادفع كل الوسوم أيضًا إن شئت

حل المشكلات

! [rejected] main -> main (fetch first) / (non-fast-forward)

السبب: في الفرع البعيد commits ليست في فرعك المحلي. دفع شخص آخر تغييرات، أو نفّذت rebase/amend على commits مدفوعة أصلًا.

اسحب التغييرات البعيدة أولًا بـ 'git pull --rebase' أو 'git pull --no-rebase'، وحلّ أي تعارضات، ثم ادفع من جديد. لا تدفع بالإجبار (ويُفضّل '--force-with-lease') إلا إن كنت متأكدًا أن لا أحد غيرك يستخدم الفرع.

git pull --rebase && git push

git@github.com: Permission denied (publickey)

السبب: فشلت مصادقة SSH: لا مفتاح محمَّل، أو مفتاحك العام غير مضاف إلى حسابك. (نقص صلاحية الكتابة يُظهر خطأً مختلفًا هو «Permission to ... denied».)

تأكد أن مفتاح SSH مضاف إلى حسابك على GitHub/GitLab. تحقّق بـ 'ssh -T git@github.com'. ومع HTTPS تأكد أنك تستخدم بيانات الاعتماد الصحيحة.

ssh -T git@github.com

fatal: No configured push destination

السبب: لا يوجد في المستودع أي مستودع بعيد مضبوط. (إن وُجد مستودع بعيد لكن الفرع بلا upstream، تظهر بدلًا من ذلك رسالة «The current branch ... has no upstream branch».)

أضف مستودعًا بعيدًا بـ 'git remote add origin <url>'، ثم ادفع مع تعيين الـ upstream بـ 'git push -u origin <branch>'.

git push -u origin main

Your branch is behind 'origin/main'

السبب: في الفرع البعيد commits أحدث من فرعك المحلي. تحتاج إلى دمج هذه التغييرات قبل الدفع.

اجلب التغييرات البعيدة وادمجها أو أعد التأسيس عليها في فرعك المحلي قبل الدفع.

git pull origin main && git push

refusing to update checked out branch

السبب: تحاول الدفع إلى مستودع غير bare يكون ذلك الفرع مسحوبًا فيه حاليًا. قد يجعل هذا مجلد عمله غير متّسق.

ادفع إلى مستودع bare، أو اطلب من المستقبِل سحب فرع آخر أولًا. يحدث هذا عادةً مع الخوادم الشخصية، لا مع GitHub/GitLab.

git config receive.denyCurrentBranch updateInstead

error: failed to push some refs to '<remote-url>'

السبب: خطأ عام له أسباب متعددة: تحديثات non-fast-forward، أو فشل hooks، أو مشكلات صلاحيات. راجع رسالة الخطأ المفصّلة فوق هذا السطر.

اقرأ مخرجات الخطأ كاملة. غالبًا تكون مشكلة non-fast-forward (اسحب أولًا) أو فشل hook الـ pre-push (أصلح ما يبلغ عنه).

git pull --rebase && git push

فشل hook الـ pre-push

السبب: وجد hook الـ pre-push (تشغيل الاختبارات، فحص الشيفرة، إلخ) مشكلات ومنع الدفع.

أصلح المشكلات التي أبلغ عنها الـ hook. ولا تتجاوزه بـ '--no-verify' إلا عند الضرورة القصوى ومع فهم العواقب.

git push --no-verify

remote: Repository not found

السبب: عنوان المستودع خاطئ، أو حُذف المستودع أو أُعيدت تسميته، أو ليست لديك صلاحية الوصول إليه.

تحقّق من عنوان المستودع بـ 'git remote -v'. تأكد أن المستودع موجود وأن لديك صلاحية الوصول. حدّث العنوان إن لزم.

git remote set-url origin https://github.com/user/correct-repo.git

نصائح وأخطاء شائعة

أفضل الممارسات

  • ✓اسحب دائمًا قبل الدفع: شغّل 'git pull' (أو 'git fetch' يليه merge أو rebase) قبل الدفع لتحصل على أحدث التغييرات البعيدة وتتجنّب رفض الدفع.
  • ✓استخدم ‎--force-with-lease بدل ‎--force: إن اضطررت إلى الدفع بالإجبار، فإن ‎--force-with-lease أكثر أمانًا لأنه يفشل إن دفع شخص آخر إلى المستودع البعيد منذ آخر fetch لك (أضف ‎--force-if-includes لأمان إضافي).
  • ✓عيّن الـ upstream عند أول دفع: استخدم 'git push -u origin branch-name' عند دفع فرع جديد لضبط التتبّع. بعدها يكفي 'git push' وحده.
  • ✓لا تدفع بالإجبار أبدًا إلى الفروع المشتركة: الدفع بالإجبار إلى main أو master أو develop قد يدمّر عمل الآخرين. استخدم commits من نوع revert بدل إعادة كتابة التاريخ.
  • ✓استخدم قواعد حماية الفروع: اضبط مستودعك لمنع الدفع بالإجبار إلى الفروع المهمة وفرض مراجعة طلبات الدمج.
  • ✓ادفع كثيرًا لحفظ نسخة من عملك: الدفع المنتظم لفروع الميزات يعمل كنسخة احتياطية ويتيح للآخرين رؤية تقدّمك.
  • ✓تحقّق قبل الدفع: استخدم 'git push --dry-run' لترى ما سيُدفع دون دفعه فعلًا. ممتاز للتحقق المزدوج.
  • ✓نظّف الفروع البعيدة: احذف فروع الميزات المدموجة بـ 'git push origin --delete branch-name' ليبقى المستودع البعيد مرتّبًا.
  • ✓استخدم الدفع الذرّي للتغييرات المترابطة: عند دفع عدة فروع يعتمد بعضها على بعض، استخدم '--atomic' لضمان نجاحها كلها أو فشلها كلها.
  • ✓وقّع الدفعات المهمة: في المستودعات الحساسة أمنيًا، استخدم '--signed' لتوقيع طلبات الدفع بـ GPG للتحقق منها (يجب أن يدعم الخادم الدفع الموقّع، وإلا فشل الدفع).

أخطاء متكررة

  • ✗الدفع دون سحب أولًا: إن كانت في المستودع البعيد commits جديدة فسيُرفض دفعك. نفّذ دائمًا 'git pull' (أو fetch ثم merge/rebase) أولًا لضمّ التغييرات البعيدة.
  • ✗استخدام ‎--force على الفروع المشتركة: الدفع بالإجبار يعيد كتابة التاريخ وقد يدمّر عمل الآخرين. استخدم ‎--force-with-lease بدلًا منه، أو الأفضل تجنّب الدفع بالإجبار إلى الفروع المشتركة كليًا.
  • ✗نسيان تعيين الـ upstream بـ -u: عند أول دفع لفرع جديد، استخدم 'git push -u origin branch-name' لضبط التتبّع. وإلا فستحتاج إلى تحديد المستودع البعيد والفرع في كل مرة.
  • ✗الدفع إلى الفرع الخطأ: تحقّق من فرعك الحالي بـ 'git branch' قبل الدفع. استخدم صيغة صريحة مثل 'git push origin feature:feature' للاطمئنان.
  • ✗عدم فهم رفض الدفع: أخطاء 'non-fast-forward' تعني أن في المستودع البعيد commits ليست لديك محليًا. اسحب وادمج/أعد التأسيس قبل الدفع، ولا تدفع بالإجبار ببساطة.

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

A:

'git push' يرفع commits المحلية إلى مستودع بعيد، فتصبح تغييراتك متاحة للآخرين. و'git pull' ينزّل commits من مستودع بعيد ويدمجها في فرعك المحلي. الدفع يرسل البيانات إلى الخارج؛ والسحب يجلبها إلى الداخل.

A:

لا يمكنك «التراجع» فعلًا عن دفع لأنه صار تاريخًا مشتركًا. للعكس الآمن، استخدم 'git revert HEAD' لإنشاء commit جديد يلغي التغييرات، ثم ادفع من جديد. تجنّب 'git reset' + الدفع بالإجبار على الفروع المشتركة لأنه يعيد كتابة تاريخ ربما سحبه آخرون.

A:

ينشئ الخيار -u علاقة تتبّع بين فرعك المحلي والفرع البعيد. بعد 'git push -u origin feature' يمكنك استخدام 'git push' و'git pull' ببساطة دون تحديد المستودع البعيد والفرع في كل مرة.

A:

لا يُستخدم الدفع بالإجبار (‎--force) إلا على فروع تساهم فيها وحدك، مثل فروع الميزات الشخصية بعد rebase. لا تدفع بالإجبار أبدًا إلى فروع مشتركة مثل main أو develop. وإن اضطررت، فاستخدم ‎--force-with-lease للأمان.

A:

استخدم صيغة refspec: ‏'git push origin local-branch:remote-branch'. مثلًا، 'git push origin feature:experiment' يدفع فرعك المحلي 'feature' إلى فرع بعيد اسمه 'experiment'.

A:

عادةً لأن في المستودع البعيد commits ليست لديك محليًا (non-fast-forward). شغّل 'git pull' لجلب تلك التغييرات ودمجها، وحلّ أي تعارضات، ثم ادفع من جديد. لا تدفع بالإجبار إلا إن كنت متأكدًا أنه آمن.

A:

استخدم 'git push --all origin' لدفع كل الفروع المحلية إلى المستودع البعيد. تحتاج الوسوم إلى أمر منفصل لأن '--all' و'--tags' لا يجتمعان: 'git push --tags origin'.

A:

'--force' يكتب فوق الفرع البعيد دون تحقق أيًّا كانت حالته. أما '--force-with-lease' فلا يكتب فوقه إلا إن لم يتغيّر البعيد منذ آخر fetch لك - ويفشل إن دفع شخص آخر، فيحمي عمله. تنبيه: أي fetch (حتى الـ fetch الخلفي في بيئة التطوير) يجدّد ذلك الفحص، فأضف ‎--force-if-includes لتشترط أيضًا أنك دمجت ما جلبته.

A:

استخدم 'git push origin --delete branch-name' أو الصيغة المختصرة 'git push origin :branch-name'. كلاهما يزيل الفرع من المستودع البعيد.

A:

'git push' وحده لا يعمل إلا إن كان للفرع الحالي فرع upstream مضبوط. للفروع الجديدة تحتاج أولًا إلى 'git push -u origin branch-name'. تحقّق من علاقات التتبّع بـ 'git branch -vv'.