ارسال تغییرات به گیت‌هاب — git push

ارسال کامیت‌های محلی به مخزن ریموت با git push، مفهوم upstream و رفع خطای rejected.

git push — ارسال به ریموت

git push کامیت‌های محلی شما را به مخزن ریموت (گیت‌هاب) می‌فرستد — این است که کدتان «آپلود» و برای دیگران قابل‌مشاهده می‌شود:

git push origin main

خروجی نمونه:

Enumerating objects: 5, done.
Writing objects: 100% (3/3), 350 bytes | 350.00 KiB/s, done.
To github.com:username/my-project.git
   a1b2c3d..e5f6g7h  main -> main

خط آخر یعنی: شاخه main محلی (a1b2c3d به e5f6g7h) به main ریموت ارسال شد.

ساختار دستور

git push <ریموت> <شاخه>
بخشمعنی
originنام ریموت (معمولاً گیت‌هاب)
mainشاخه‌ای که می‌فرستید

سوئیچ -u (upstream)

اولین بار که شاخه‌ای را push می‌کنید، با -u آن را به شاخه ریموت وصل کنید:

git push -u origin main

از دفعه بعد فقط:

git push
سوئیچ -u (مخفف --set-upstream) می‌گوید: «شاخه محلی main را دنبال‌کننده‌ی origin/main کن». بعدش گیت می‌داند pull و push شما مربوط به کجاست.

خطای معروف: rejected

اگر ریموت کامیت‌هایی داشته باشد که شما ندارید (مثلاً همکارتان push کرده):

git push
# To github.com:username/my-project.git
#  ! [rejected]        main -> main (fetch first)
# error: failed to push some refs...

راه‌حل — اول تغییرات جدید را بگیرید، بعد push کنید:

git pull
git push

چرخه کامل روزانه با ریموت

# صبح: به‌روز شدن
git pull

# کار روزانه:
git switch -c feature/new-page
# ... کد زدن ...
git add .
git commit -m "افزودن صفحه جدید"

# ارسال شاخه جدید:
git push -u origin feature/new-page

# بعد از merge در گیت‌هاب:
git switch main
git pull
git branch -d feature/new-page

push اجباری — خطرناک! ⚠️

git push --force

این دستور ریموت را به‌زور با نسخه محلی شما جایگزین می‌کند — کامیت‌های دیگران ممکن است حذف شوند! فقط وقتی واقعاً می‌دانید چه می‌کنید استفاده کنید.

نسخه امن‌تر: git push --force-with-lease — اگر همکارتان در همین لحظه push کرده باشد، اجباری انجام نمی‌شود.

چرا push من با SSH رمز نمی‌خواهد؟

چون در مبحث ۲۰ کلید SSH را تنظیم کردید! اگر از HTTPS استفاده می‌کنید، گیت‌هاب Personal Access Token می‌خواهد — توصیه ما: به SSH مهاجرت کنید (git remote set-url).

خلاصه

این مبحث بخشی از دوره آموزش کامل Git است.

ابزارهای مرتبط