Sie sehen eine Git-Sicherheitsfunktion. Git weigert sich, den Remote-Zweig mit Ihrem Zweig zu aktualisieren, da das Head-Commit Ihres Zweigs nicht direkt vom aktuellen Head-Commit des Zweigs abhängt, auf den Sie pushen.
Wenn dies nicht der Fall wäre, würden zwei Personen, die ungefähr zur gleichen Zeit in dasselbe Repository pushen, nicht wissen, dass zur gleichen Zeit ein neues Commit eingeht, und wer zuletzt pusht, würde die Arbeit des vorherigen Drückers ohne eines von beiden verlieren sie erkennen dies.
Wenn Sie wissen, dass Sie die einzige Person sind, die Druck ausübt, und Sie ein geändertes Commit oder ein Commit, das den Zweig zurückspult, senden möchten, können Sie Git zwingen, den Remote-Zweig mithilfe des -f
Schalters zu aktualisieren .
git push -f origin master
Auch dies funktioniert möglicherweise nicht, da Git es Remote-Repositorys ermöglicht, nicht schnell vorwärts gerichtete Pushs am anderen Ende mithilfe der Konfigurationsvariablen abzulehnen receive.denynonfastforwards
. In diesem Fall sieht der Ablehnungsgrund folgendermaßen aus (beachten Sie den Teil "Remote abgelehnt"):
! [remote rejected] master -> master (non-fast forward)
Um dies zu umgehen, müssen Sie entweder die Konfiguration des Remote-Repositorys ändern oder als Dirty-Hack den Zweig folgendermaßen löschen und neu erstellen:
git push origin :master
git push origin master
Im Allgemeinen verwendet der letzte Parameter git push
das Format <local_ref>:<remote_ref>
, wobei local_ref
der Name des Zweigs im lokalen Repository und remote_ref
der Name des Zweigs im Remote-Repository ist. Dieses Befehlspaar verwendet zwei Abkürzungen. :master
hat eine null local_ref, was bedeutet, dass eine Nullverzweigung auf die entfernte Seite verschoben wird master
, dh die entfernte Verzweigung gelöscht wird. Ein Zweigstellenname ohne :
Mittel schiebt den lokalen Zweig mit dem angegebenen Namen an den Remote-Zweig mit demselben Namen. master
in dieser Situation ist kurz für master:master
.