! [rejected] main -> main (fetch first)
یعنی: «گیتهاب تغییراتی داره که شما ندارید. اول اونها رو دریافت کنید، بعد push کنید.»
یکی از دلایل رایج این خطا اینه که بعد از push اولیه، بهصورت دستی از خود گیتهاب تغییراتی اعمال کرده باشید و اون تغییرات رو در نسخهی لوکال نداشته باشید. (البته ممکنه فرد دیگهای هم روی ریپو کامیت زده باشه.)
راه حل: اول با git pull تغییرات ریموت رو دریافت کنید، بعد دوباره push کنید تا نسخهها هماهنگ بشن.
توجه داشته باشید:
اگه history لوکال و ریموت کاملاً متفاوتن و میخواید نسخهی لوکال رو جایگزین ریموت کنید، میتونید از این دستور استفاده کنید:
git push --force
⚠️ ولی با احتیاط! چون کامیتهای روی ریموت رو پاک میکنه و اگه کسی دیگهای روی ریپو کار کرده باشه، تغییراتش از بین میره. اگه میخواید ایمنتر باشه، از این استفاده کنید:
git push --force-with-lease
این نسخه قبل از force کردن، چک میکنه که آیا ریموت از آخرین باری که دیدید تغییر کرده یا نه؛ اگه تغییر کرده باشه، جلوی push رو میگیره و نمیذاره کار بقیه رو خراب کنید.
#گیتگیتهاب
🐾 @CodeCat_Dev