1069 Stimmen

Git Fehler: konnte einige Referenzen nicht zum Remote-Repository pushen.

Ich kann jetzt nicht pushen, obwohl ich es gestern konnte.

Wenn ich git push origin master verwende, erhalte ich einen Fehler:

$ git remote -v
origin  https://github.com/REDACTED.git (fetch)
origin  https://github.com/REDACTED.git (push)

$ git push origin master
Username für 'https://github.com': REDACTED
Passwort für 'https://REDACTED@github.com':
Zu https://github.com/REDACTED.git
! [rejected]         master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/REDACTED.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: Details findest du in 'Note about fast-forwards' in 'git push --help'.

Wie mein Arbeitsverzeichnis und mein Remote-Repository aussehen:

Screenshot eines Windows-Dateiordners mit diesen Verzeichnissen: .git, css, js. Und diesen Dateien: index.php, readme, setsu.php. Das Wort

1310voto

VonC Punkte 1117238

(Hinweis: ab Okt. 2020 wird jedes neue Repository mit dem Standardzweig main und nicht master erstellt. Und Sie können den Standardzweig eines vorhandenen Repositorys von master in main umbenennen.
Der Rest dieser Antwort von 2014 wurde aktualisiert, um "main" zu verwenden)

(Das Folgende setzt voraus, dass github.com selbst nicht nicht erreichbar ist, wie eri0o in den Kommentaren bemerkt: siehe www.githubstatus.com zur Sicherheit)

Wenn im GitHub-Repository neue Commits verzeichnet wurden, während Sie lokal gearbeitet haben, empfehle ich:

git pull --rebase
git push

Die vollständige Syntax lautet:

git pull --rebase origin main
git push origin main

Mit Git 2.6+ (Sept. 2015), nachdem Sie (einmal) ausgeführt haben

git config --global pull.rebase true
git config --global rebase.autoStash true

Wäre ein einfaches git pull ausreichend.
(Hinweis: mit Git 2.27 Q2 2020 steht auch für Ihren regulären Pull ein merge.autostash zur Verfügung, ohne Rebase)

So würden Sie (den Teil --rebase) Ihre lokalen Commits auf dem neu aktualisierten origin/main (oder origin/yourBranch: git pull origin yourBranch) wiederholen.

Sehen Sie ein ausführlicheres Beispiel im Kapitel 6 Pull mit Rebase des Git Pocket Book.

Ich würde empfehlen:

# zuerst hinzufügen und committen
#
git push -u origin main

# Oder git 2.37 Q2 2022+
git config --global push.autoSetupRemote true
git push

Dadurch wird eine Nachverfolgungsbeziehung zwischen Ihrem lokalen Hauptzweig und seinem Upstream-Zweig hergestellt.
Danach kann zukünftig für diesen Zweig jeder Push mit einem einfachen Befehl erfolgen:

git push

Erneut, mit Git 2.37+ und seiner globalen Option push.autoSetupRemote, würde ein einfaches git push sogar für den ersten dasselbe tun (d.h. eine Nachverfolgungsbeziehung zwischen Ihrem lokalen main-Zweig und seinem Upstream-Zweig origin/main herstellen).

Sehen Sie "Warum muss ich explizit einen neuen Zweig pushen?".


Weil der OP bereits zurückgesetzt und seinen Commit neu durchgeführt hat auf origin/main:

git reset --mixed origin/main
git add .
git commit -m "Dies ist ein neuer Commit für das, was ich ursprünglich als Änderung geplant hatte"
git push origin main

Es ist nicht erforderlich, pull --rebase durchzuführen.

Hinweis: git reset --mixed origin/main kann auch als git reset origin/main geschrieben werden, da die Option --mixed die Standardoption ist, wenn git reset verwendet wird.

263voto

cagcak Punkte 3344

Versuchen Sie es:

git push -f origin master

Das sollte das Problem lösen.

Basierend auf dem Kommentar von @Mehdi, eine Klarstellung zum —Force-Pushing: Der oben genannte Git-Befehl funktioniert sicher nur für den ersten Commit. Wenn es bereits Commits, Pull Requests oder Branches in der Vergangenheit gab, setzt dies alles zurück und setzt es auf null. Falls dies der Fall ist, verweisen Sie bitte auf die ausführliche Antwort von @VonC für eine bessere Lösung.

161voto

ironcladmvtm Punkte 1636

Wenn Sie nur git init verwendet haben und Ihre Dateien mit git add . oder etwas Ähnlichem hinzugefügt haben und Ihren Remote-Zweig hinzugefügt haben, kann es sein, dass Sie einfach noch nichts lokal committet haben (git commit -m 'Commit-Nachricht'), um es auf den Remote zu pushen... Ich hatte gerade diesen Fehler und das war mein Problem.

79voto

pramodpxi Punkte 929

Ich hatte das gleiche Problem. Ich hatte dieses Problem, weil ich noch keine Commits erstellt hatte, nicht einmal einen ersten Commit, und trotzdem versuchte ich zu pushen.

Als ich git commit -m "deine Nachricht" gemacht habe, hat alles gut funktioniert.

67voto

lord Punkte 191

Es hat für mich mit dieser Kombination mehrerer Befehlszeilen funktioniert:

git reset 
git remote -v
git pull --rebase
git init
git add -A
git commit -m "Dein Commit hinzufügen"
git branch -M main
git push origin main --force

Sei vorsichtig. Wenn sie eine Readme-Datei haben, löscht der git reset sie.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X