EMZETT.
Giriş yap

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

  1. Çek ve entegre et: git pull --rebase (doğrusal geçmiş) veya git pull (birleştirme commit’i). Çakışmaları çöz, sonra git push.
  2. Önce bak: git fetch ve git log HEAD..origin/main sunucuda nelerin yeni olduğunu gösterir.
  3. 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).
  4. Paylaşılan dallarda (main, develop) asla force kullanma; anlaşın veya pull request ile çalışın.
  5. Yanlış dal mı? git branch -vv upstream’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