865 Stimmen

Wie schiebe ich eine geänderte Übergabe an das entfernte Git-Repository?

Als ich ein wenig mit meinem Quellcode gearbeitet habe, habe ich mein übliches Ding Commit gemacht und dann in ein entferntes Repository gepusht. Aber dann habe ich bemerkt, dass ich vergessen habe, meine Importe im Quellcode zu organisieren. Also habe ich den Befehl amend ausgeführt, um den vorherigen Commit zu ersetzen:

> git commit --amend

Leider kann der Commit nicht in das Repository zurückgeschoben werden. Sie wird auf diese Weise abgelehnt:

> git push origin
To //my.remote.repo.com/stuff.git/
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to '//my.remote.repo.com/stuff.git/'

Was sollte ich tun? (Ich kann auf das entfernte Repository zugreifen.)

2 Stimmen

Was wäre, wenn ich mit --amend nur die Commit-Nachricht ändern würde? Gibt es eine Möglichkeit, die letzte Commit-Nachricht allein zu bearbeiten, wenn sie bereits an die Gegenstelle übertragen wurde? Ich habe das auf Github gemacht und erhielt die gleiche Meldung über die nicht schnelle Weiterleitung. Dann habe ich die folgende Lösung angewandt, aber der Merge hat nur weitere Commit-Nachrichten hinzugefügt.

9 Stimmen

@faB: Ich denke, das ist eine FAQ. Eine Commit-Nachricht wird zusammen mit dem Commit gehasht, so dass das Ändern es ändert den Revid (Hash). Falls es nicht klar ist: Nein, das geht nicht. IIRC kann Out-of-Band-Informationen in Notizen speichern (so dass Sie bestehende Commits mit Anmerkungen versehen können, ohne sie zu verändern). Um bestimmte Commits zu kennzeichnen, verwenden Sie Tags

1 Stimmen

In Kürze (git1.8.5, Q4 2013) werden Sie in der Lage sein eine git push -force sorgfältiger .

7voto

Okan Çetin Punkte 89

Wenn Sie Visual Studio Code verwenden, können Sie diese Erweiterung ausprobieren, um es einfacher zu machen.

https://marketplace.visualstudio.com/items?itemName=cimdalli.git-commit-amend-push-force

Wie der Name schon sagt, führt er die Befehle nacheinander aus

  • git commit --amend
  • git push --force

6voto

ShawnFeatherly Punkte 1990

Wenn Sie wissen, dass niemand Ihren unveränderten Commit gezogen hat, verwenden Sie die --force-with-lease Option von git push .

In TortoiseGit können Sie das Gleiche unter "Push..." mit den Optionen "Erzwingen: Kann verwerfen" und "Bekannte Änderungen" überprüfen.

Erzwingen (kann bekannte Änderungen verwerfen) erlaubt es dem entfernten Repository, einen sichereren nicht-schnellen Push zu akzeptieren. Dies kann dazu führen, dass das entfernte Repository Commits verliert; verwenden Sie es mit Vorsicht. Dies kann verhindern, dass unbekannte Änderungen von anderen Personen im entfernten Repository verloren gehen. Es wird geprüft, ob der Serverzweig auf denselben Commit verweist wie der Zweig des entfernten Repositorys (bekannte Änderungen). Wenn ja, wird ein Force Push durchgeführt. Andernfalls wird er abgelehnt. Da Git keine Remote-Tracking-Tags hat, können Tags mit dieser Option nicht überschrieben werden.

5voto

Praveen Dhawan Punkte 172

Sie erhalten diese Fehlermeldung, weil der Git-Remote bereits über diese Commit-Dateien verfügt. Sie müssen den Zweig zwangsweise pushen, damit dies funktioniert:

git push -f origin branch_name

Vergewissern Sie sich auch, dass Sie den Code aus der Ferne beziehen, da jemand anderes in Ihrem Team möglicherweise denselben Zweig gepusht hat.

git pull origin branch_name

Dies ist einer der Fälle, in denen wir die Übergabe an den entfernten Server erzwingen müssen.

2voto

craken Punkte 1387

Hier ist eine sehr einfache und saubere Methode, um Ihre Änderungen zu veröffentlichen, nachdem Sie bereits eine git add "your files" y git commit --amend :

git push origin master -f

oder:

git push origin master --force

1voto

Rolf Punkte 5284

Ich habe einfach das getan, was Git mir gesagt hat. So:

  • Kann wegen der geänderten Verpflichtung nicht schieben.
  • Ich mache einen Zug wie vorgeschlagen.
  • Das Zusammenführen schlägt fehl, also repariere ich es manuell.
  • Erstellen Sie eine neue Übergabe (mit der Bezeichnung "Zusammenführen") und pushen Sie sie.
  • Es scheint zu funktionieren!

Anmerkung: Der geänderte Commit war der letzte.

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