دستور 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 هم پاک شود.