Unsere entfernte Hauptniederlassung wurde irgendwie durcheinander gebracht. Der aktuelle Entwicklungscode befindet sich zusammen mit den neuesten Commits in der Hauptniederlassung. Offensichtlich ist der Entwicklungscode nicht für den Hauptzweig bereit.
Also habe ich in meinem lokalen Repository einen Reset auf das neueste Tag durchgeführt git reset --hard (Tag)
. Der Hauptzweig ist jetzt in meinem lokalen Repository korrekt. Wenn ich jetzt versuche, die Änderungen in das Remote-Repository zu übertragen, git push origin master
wird folgende Fehlermeldung angezeigt:
To (REMOTE GIT REPOSITORY LOCATION)
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
Nachdem ich mich umgesehen hatte, fand ich die --force
Option heraus. Also habe ich einen Force-Push auf das Remote-Repository durchgeführt git push --force origin master
und immer noch eine Fehlermeldung erhalten:
Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To (REMOTE GIT REPOSITORY LOCATION)
! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
Ich kann keinen Pull-on-Master ausführen, da er Entwicklungscode enthält, der nicht auf dem Master sein kann.
denyNonFastforwards = true
. Ich habe es in false geändert, meine Änderungen verschoben und dann wieder in true geändert. Nochmals vielen Dank an alle für die Hilfe.Antworten:
Die Meldung bedeutet, dass Sie keinen nicht schnellen Vorlauf ausführen dürfen.
Ihr Remote-Repository hat höchstwahrscheinlich
denyNonFastforwards = true
in seiner Konfiguration. Wenn Sie das ändern,git push --force
sollte es funktionieren.Um die Einstellung zu ändern, benötigen Sie Zugriff auf den Computer mit dem Remote-Repository. Von dort aus tun
git config receive.denynonfastforwards false
.quelle
git config
für einen Server machen? Oder vielleicht haben Sie das metaphorisch verwendet. Um mit diesen Ideen zu spielen, habe ich ein Test-Repo in/opt/git
(meinem Git-Server-Bereich) erstellt und dann diese Einstellung in geändert/opt/git/the_repo/the_repo.git/config
. Aber sobald das erledigt ist,git push --force origin SHA:branch
hat es nach Bedarf funktioniert.Die Fernbedienung erlaubt keinen nicht schnellen Vorlauf.
Ihre beste Option ist es,
git revert
alle Commits zu übernehmen, die nicht vorhanden sein sollten, und in Zukunft vorsichtiger zu sein.git revert [commit]
wird ein neues Commit erstellen, das alles rückgängig macht, was[commit]
getan wurde.quelle
Schritte zum dauerhaften Aktivieren des Kraftdrucks im folgenden Stil
Bearbeiten Sie die Datei mit dem Namen "config" in dem Ordner, der auf Ihrem Remote-Repository mit ".git" endet
Suchen Sie in der Befehlszeilenausgabe von git nach dem fehlgeschlagenen Push nach der Zeile, in der Folgendes steht:
dann
Setzen Sie "leugnenNonFastforwards" auf false
In "config" setzen
Jetzt können Sie mit -f von Ihrem lokalen Computer aus pushen
quelle
git revert
ist etwas kompliziert, wenn Sie Zusammenführungen haben. Um komplizierter zu sein, hat mein Fall 3 Zusammenführungen, von denen eine mit sehr altem ~ 20 Commit von der Entwicklung abweicht, die zweite ist eine Art Zusammenführung von Master - hässlich wie die Hölle.Versuchen Sie, das
-f
Flag zu verwenden und es nach dem Namen des Remote-Zweigs zu setzen.git push origin master -f
quelle
git push -f origin master
und das gleiche Ergebnis. Beide Male, als ich es versuchte, bekam ich die zweite Version der Fehlermeldung.Du darfst keinen Git-Push machen, der nicht schnell vorspult.
Wenn es sich bei der Fernbedienung um GitHub handelt,
https://github.com/$USER/$REPO/settings/branches
rufen Sie den betreffenden Zweig auf und heben Sie den Schutz auf.Sie müssen Administrator des Repos sein, um das zu tun.
Wenn die Fernbedienung Ihr eigener Git-Server ist, führen Sie sie
git config receive.denynonfastforwards false
dort aus.quelle
Der beste Weg, dies zu umgehen, besteht darin, den Remote-Zweig zu löschen und erneut zu senden:
quelle
Das Problem tritt auf, weil der aktuelle Zweig nicht richtig für den PULL konfiguriert ist . Überprüfen Sie zunächst mit -, ob der Upstream-Zweig für den Pull richtig konfiguriert ist
git remote show origin
. Sie finden es im Abschnitt - Lokale Zweige, die für 'git pull' konfiguriert sind : . Wenn nicht, konfigurieren Sie es mit:Geben Sie dem Platzhalter den entsprechenden Filialnamen an - MYBRANCH
quelle
Ich verwende diese Befehlsgruppe, um mein Remote-Repo zurückzusetzen. Dadurch wird Ihr lokales Repo neu initialisiert und erneut mit Ihrem Remote-Repo verknüpft. Anschließend werden die Aktualisierungen erzwungen.
Ich denke, dass dieser Weg in Ihrem Fall nicht funktioniert, aber für jemand anderen nützlich sein kann
Gehen Sie zum Quellordner und führen Sie die folgenden Befehle aus: Beachten Sie, dass dies
https://github.com/*.git
Ihr Remote-Repo-Link ist**Note: this will clear all your git history on your master branch**
quelle
Für mich zeigte @svicks Hinweis in die richtige Richtung. Da der Git-Server, den ich ändern wollte, eigentlich meine Box ist, habe ich mich angemeldet und
git config --global receive.denynonfastforwards false
alle Repos geändert, um einen erzwungenen Nicht-ff-Push zu akzeptieren. Hat nicht sofort funktioniert. Was ich fand war, dass in der Konfiguration bereitsreceive.denynonfastforwards=true
festgelegt war und es nicht mit gelöscht werden konntegit config --global --unset receive.denynonfastforwards
. Das manuelle Bearbeiten im Repo (vi config
) hat jedoch funktioniert.quelle
Ich habe das Problem gelöst, indem ich den Hauptzweig aus dem geschützten und auch standardmäßigen Zweig entfernt habe, der beim Festlegen eines Repositorys etwas über den geschützten Zweigregeln liegt.
quelle