سرفصل‌های آموزشی
آموزش کاربردی گیت برای برنامه نویسان
git push

git push

دستور 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 اجرا می شود تا آن تغییر ها با اعضای تیم به اشتراک گذاشته شود. 

قبل و بعد از Push کردن
تصویر 1- قبل و بعد از 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 هم پاک شود.

online-support-icon