it-swarm.com.de

Warum kann ich kein leeres Commit pushen?

  git commit --amend --allow-empty

dann

  git Push Origin master

der Idiot hat das gesagt

! [rejected]        master -> master (non-fast-forward)
error: failed to Push some refs to 'remoteurl'
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.

Warum? Wie kann ich das beheben?

35
user2195

Das Problem ist nicht, dass Sie ein leeres Commit pushen.
Es geht darum, ein anderes Commit (eines mit einem anderen SHA1) als das bereits gepushte Commit zu pushen.
Das ist, was git commit --amend macht: es hat das letzte Commit geändert, es erstellt kein neues.

Das bedeutet, dass Sie eine andere Historie verschieben, als die, die andere möglicherweise bereits geklont haben.
Wenn Sie sicher sind, dass dies kein Problem darstellt, müssen Sie den Push erzwingen:

git Push -f Origin master

Hättest du tun sollen:

git commit --allow-empty

Sie hätten ein neues (leeres) Commit erstellt, das Sie ohne Probleme hätten pushen können.

56
VonC

Wenn Sie eine Pull-Anfrage für Github erstellen möchten. Sie können:

git commit --allow-empty -m "make pull request"

Dann erstellen Sie eine Pull-Anfrage ohne Änderung.

5
1Rhino

Um die akzeptierte Antwort zu verdeutlichen, da ich nicht genug Reputation habe, um einen Kommentar abzugeben:

Wenn Sie verwenden

git commit --amend

es erstellt ein neues Commit. Es wird jedoch nicht an das aktuelle Festschreiben angehängt, sondern an das übergeordnete Element des aktuellen Festschreibens. Optisch würde es wie eine Gabel aussehen.

  O (old commit)
 /
O-O (amended commit)

Git interpretiert dies als eine Abweichung von der Fernbedienung. Das ist der Grund, warum Sie es nicht ohne Kraftaufwand schieben können.

2
Dustin

Stellen Sie sicher, dass der Remote-Zweig, an den Sie senden möchten, derzeit nicht ausgecheckt ist. Ich habe einmal ein Git-Repository auf einem meiner Server erstellt und konnte nicht herausfinden, warum ich nicht darauf pushen konnte. Nach ungefähr einem Tag der Fehlerbehebung stellte ich fest, dass ich beim Auschecken im Server-Repository keine Push-Funktion für das Repository (oder den gewünschten Zweig) ausführen konnte. Daher habe ich einfach einen neuen Zweig erstellt, den ich auschecke, wenn ich Änderungen am Server vorgenommen habe, und kann dann auf den Server pushen. Dies ist möglicherweise nicht Ihr Problem, aber es trat ein ähnlicher Fehler auf, als ich ein Problem hatte, das auf einen leeren Git auf meinem Server drückte.

0
PRaven