Git: push reddedildi (non-fast-forward)
Kısaca: Sunucuda yerelde olmayan commit’ler var; başkalarının değişikliklerini çekip entegre edene kadar Git push’u reddeder.
Biraz daha ayrıntılı: Mesaj: ! [rejected] main -> main (fetch first) veya (non-fast-forward), ayrıca Updates were rejected because the remote contains work that you do not have locally. Git, başkalarının commit’lerinin üzerine yazılmasına karşı korur.
Ayrıntılı
Nedenler
- Son eşitlemenden sonra başka biri (veya sen ikinci bir cihazdan) push yaptı.
- Yerelde geçmişi değiştirdin (rebase, amend, reset) ve dalın ucu artık sunucuyla uyuşmuyor.
- Yanlış dal veya uzak depo.
Çözümler
- Çek ve entegre et:
git pull --rebase(doğrusal geçmiş) veyagit pull(birleştirme commit’i). Çakışmaları çöz, sonragit push. - Önce bak:
git fetchvegit log HEAD..origin/mainsunucuda nelerin yeni olduğunu gösterir. - Kendi dalında bilerek geçmişi yeniden yazdıktan sonra:
git push --force-with-lease(--force’tan daha güvenli, sunucunun değişmediğini kontrol eder). - Paylaşılan dallarda (main, develop) asla force kullanma; anlaşın veya pull request ile çalışın.
- Yanlış dal mı?
git branch -vvupstream’i gösterir.
Hatırlatma
--force körü körüne üzerine yazar ve başkalarının işini yok edebilir. --force-with-lease, sunucu bu arada yeni commit’ler aldıysa iptal eder. Paylaşılan dallarda geçmişi değiştirmeden önce ekibe önceden haber ver. Korumalı dallar (branch protection) birçok ekipte force push’u tamamen yasaklar.
Ayrıca bak: Birleştirme çakışmasını çözme, Git: not a git repository