دستور git push برای بارگذاری محتویات مخزن Local به مخزن remote استفاده می شود. با push کردن، شما commit های Local خود را به مخزن remote منتقل می کنید.
این دستور برعکس git fetch است. همان طور که fetch کردن، commit ها را به شاخه local می آورد، push کردن آن ها را به شاخه remote می فرستد. شاخههای remote توسط دستور git remote پیکربندی می شوند.
Push کردن پتانسیل بازنویسی تغییرات را دارد. هنگام push کردن باید احتیاط کرد. درباره این گونه موضوع ها جلو تر صحبت می کنیم.
کاربرد git push
git push <remote> <branch>
شاخه مورد نظر را با همهی commitها و objectهای داخلی در مخزن remote گفته شده، بارگذاری کنید. این دستور یک شاخه Local در مخزن مقصد ایجاد میکند. برای جلوگیری از بازنویسی commit ها، گیت به شما اجازه نمیدهد تغییرات قدیمی را در مخزن مقصد push کنید.
git push <remote> --force
مانند دستور بالا است اما بارگذاری تغییرات قدیمی را هم انجام میدهد. تنها زمانی از گزینه force استفاده کنید که از کاری که انجام می دهید اطمینان دارید.
git push <remote> --all
تمام شاخههای Local شما را در remote مشخص شده بارگذاری می کند.
git push <remote> --tags
زمانی که یک شاخه یا تمام شاخه ها را بارگذاری می کنیم، برچسب ها همراه آن ها بارگذاری نمی شوند. از گزینه tags– استفاده کنید تا تمام برچسبهای local تان در مخزن remote بارگذاری شوند.
بررسی git push
دستور git push معمولا برای منتشر کردن تغییرهای Local در یک مخزن مرکزی استفاده می شود. پس از این که یک مخزن Local تغییر کرد، دستور push اجرا می شود تا آن تغییر ها با اعضای تیم به اشتراک گذاشته شود.

تصویر بالا نشان می دهد هنگامی که تغییرات شاخه main (master)، local
شما از شاخه main مخزن مرکزی جلوتر می رود و شما آن ها را با اجرای دستور git push در مخزن مرکزی منتشر می کنید، چه اتفاقی می افتد. دستور git push درواقع مانند اجرای git merge main درون مخزن remote عمل میکند.
Git push و همگام سازی
git push یکی از چندین بخش فرایند همگامسازی در گیت است. دستورهای همگام کننده روی شاخههای remote ای عمل میکنند که توسط دستور git remote پیکربندی شده است.
git push را می توان به عنوان دستور upload در نظر گرفت در حالی که git fetch و git pull را می توان مانند دستور download تصور کرد. زمانی که تغییرات با دستورهای upload و download جا به جا شدند، git merge در مقصد استفاده می شود تا تغییرات را ادغام کند.
بارگذاری در مخزن های bare
یکی از عادت هایی که در استفاده از گیت وجود دارد، داشتن یک مخزن bare به عنوان مخزن مرکزی است. از آن جایی که push کردن، ساختار شاخههای remote را تغییر می دهد، ایمن تر است که به مخزنی که با گزینه bare–
ساخته شده push کنیم. برای این که بیشتر با مخزنهای bare آشنا شوید، قسمت git init را بخوانید.
بارگذاری به صورت force
گیت درخواستهای push ای که منجر به بارگذاری مجدد تغییرات قدیمی می شوند را انجام نمی دهد تا از بازنویسی تاریچه مخزن مرکزی جلوگیری کند. بنابراین اگر تاریخچه remote از تاریخچه شما جدا شد، شما باید شاخه remote را pull کنید و تغییرات آن را در شاخه Local خود ادغام کنید و سپس دوباره push را انجام دهید.
گزینه force – این رفتار را تغییر داده و اجازه می دهد شاخه مخزن remote مانند شاخه Local شما شود. این کار با حذف هر تغییری که ممکن است بعد از آخرین pull شما رخ داده باشد صورت می گیرد. تنها زمانی که شما نیاز پیدا می کنید به صورت force، Push انجام دهید هنگامی است که متوجه میشوید commitهایی که به اشتراک گذاشته اید اشتباه بوده اند و آن ها را با دستور git commit –amend
یا git rebase اصلاح می کنید. البته شما باید مطئن شوید که هیچ کدام از هم تیمی هایتان آن commitها را پیش از استفاده از گزینه force، –pull
نکرده اند.
نمونه ها
git push پیش فرض
مثال پیش رو یکی از روش های استاندارد بارگذاری تغییرات Local به مخزن مرکزی را نشان می دهد. ابتدا با دریافت نسخه مخزن مرکزی و rebase کردن تغییرات محلی روی آن، مطمئن می شویم که شاخه main محلی بروز است. سپس دستورgit push همه commit های شاخه main محلی را در مخزن مرکزی بارگذاری می کند.
git checkout main
git fetch origin main
git rebase -i origin/main
git push origin main
از آن جایی که مطمئن شدیم شاخه main محلی بروز است، این عملیات باید تغییرات را ادغام کند و هیچ خطایی درمورد بازنویسی تغییرات قدیمی دریافت نکنیم.
Push به صورت force اصلاح شده
دستور git commit گزینهی amend– را قبول می کند که باعث بروز شدن commit قبلی می شود. یک commit معمولا به دلیل تغییر پیام یا اضافه کردن تغییرات جدید اصلاح می شود. پس از اینکه یک commit اصلاح شد اجرای git push با خطا مواجه می شود زیرا گیت، commit اصلاح شده را می بیند و نسبت به commit ای که در remote
است آن را متفاوت تشخیص می دهد. گزینه force– باید استفاده شود تا یک commit اصلاح شده بارگذاری شود.
تغییراتی در مخزن ایجاد می کنیم#
git commit --amend
پیام commit موجود را ویرایش می کنیم#
git push --force origin main
در مثال بالا فرض بر این است که دستور ها در مخزنی با تاریخچه commit اجرا می شوند. با دستور git commit –amend
، commit قبلی را ویرایش می کنیم. سپس Commit اصلاح شده با گزینه force–
بارگذاری می شود.
حذف شاخه یا برچسب remoote
گاهی اوقات نیاز است که شاخه ها را برای سامان دهی و مرتب سازی پاک کنیم. برای پاک کردن کامل یک شاخه باید آن را به صورت local و remote پاک کنیم.
git branch -D branch_name
git push origin :branch_name
مثال بالا شاخه remote ای با نام branch_name
را پاک می کند. قراردادن: قبل از نام شاخه در دستور git push باعث می شود آن شاخه از remote هم پاک شود.