Gibt es eine Möglichkeit, eine Festschreibungsnachricht nach dem Festschreiben und dem Senden an GitHub zu bearbeiten? Ich sehe, dass es eine "Notiz hinzufügen" sowie Inline-Kommentare gibt, aber keine tatsächliche Bearbeitung einer Festschreibungsnachricht. In Git-Erweiterungen gibt es auch die Option "Commit ändern", mit der die vorhandene Nachricht jedoch nicht bearbeitet wird.
129
Antworten:
git rebase -i <commit hash you want to change>^
Dies öffnet Ihren Standardeditor (normalerweise vi ) mit einer Liste von Commits und Aktionen für jeden einzelnen. Standardmäßig ist die Aktion
pick
.Wechseln Sie für alle Festschreibungen, die Sie ändern möchten,
pick
zureword
.Speichern und beenden (in vi:)
:wq
.Bei jedem solchen Commit erhalten Sie einen Editor, der die Commit-Nachricht bearbeitet. Ändern Sie es nach Belieben, speichern und beenden Sie es.
Nachdem Sie alle Festschreibungsnachrichten bearbeitet haben, kehren Sie zur Eingabeaufforderung zurück und erstellen einen neuen Baum mit den aktualisierten Nachrichten.
Sie können sie jetzt mit auf github hochladen
git push origin --force
.Wenn Sie nur Ihr letztes Commit korrigieren müssen, können Sie die Schritte 1 bis 4 durch ersetzen
git commit --amend
.quelle
^
dort bin - ich habe in der Tat vorgeschlagen, auf dem übergeordneten Element des Commits zu basieren, das Sie ändern möchten.^^
, um den Befehl mit einem Literal zu beenden^
:git rebase -i 2c747b32^^
In Intellij Idea ist das ganz einfach.
quelle
git push origin --force
danach ausführen, wie in @ Mureiniks Antwort vorgeschlagen.Prämisse:
wenn dein git-graph so aussieht ...
(
df9c192
undb7ec061
sind die Commit-Hashes von Target-Commit und Parent-Commit, getrennt)Lösung:
Sie können einfach die folgenden Anweisungen eingeben ...
Erläuterung:
git reset --soft b7ec061
behält Ihre Änderungen an Dateien bei und setzt sie auf Parent-Commit zurück (dh b7ec061)git commit -m "..."
wird lokal ein neues Commit erstellengit push -f
Überträgt Ihr neues Commit auf den Server und ersetzt das alte (dh df9c192)quelle
Eine andere Möglichkeit besteht darin, ein zusätzliches "Errata-Commit" (und Push) zu erstellen, das auf das Commit-Objekt verweist, das den Fehler enthält. Das neue Errata-Commit stellt auch die Korrektur bereit. Ein Errata-Commit ist ein Commit ohne wesentliche Codeänderungen, jedoch mit einer wichtigen Commit-Nachricht. Fügen Sie Ihrer Readme-Datei beispielsweise ein Leerzeichen hinzu und bestätigen Sie diese Änderung mit der wichtigen Commit-Nachricht, oder verwenden Sie die Option git
--allow-empty
. Es ist auf jeden Fall einfacher und sicherer als das erneute Basieren, es ändert nicht den wahren Verlauf und es hält den Zweigbaum sauber (unter Verwendung vonamend
ist auch eine gute Wahl, wenn Sie das letzte Commit korrigieren, aber ein Errata-Commit ist möglicherweise eine gute Wahl für ältere Commits. So etwas passiert so selten, dass es gut genug ist, den Fehler einfach zu dokumentieren. Wenn Sie in Zukunft in einem Git-Protokoll nach einem Feature-Schlüsselwort suchen müssen, wird das ursprüngliche (fehlerhafte) Commit möglicherweise nicht angezeigt, da in diesem ursprünglichen Commit das falsche Schlüsselwort verwendet wurde (der ursprüngliche Tippfehler). Das Schlüsselwort wird jedoch angezeigt in der Errata-Festschreibung, die Sie dann auf die ursprüngliche Festschreibung verweist, die den Tippfehler hatte. Hier ist ein Beispiel:quelle
Antwort von @Mureinik ist gut aber für Neulinge nicht nachvollziehbar.
Erste Methode:
git commit --amend
:pick
, dies ist bereits die Bearbeitungsseite, und Sie können die oberste Nachricht direkt bearbeiten und speichern und beenden , zB:git push -u origin master --force
oder<how you push normally> --force
. Der Schlüssel ist hier--force
.Zweite Methode:
Sie können den Commit-Hash sehen
git log
oder aus der Repository-URL extrahieren, in meinem Fall zum Beispiel881129d771219cfa29e6f6c2205851a2994a8835
Dann können Sie tun
git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
odergit rebase -i HEAD^
(wenn die neueste)Du würdest sehen:
noop
dann sehen, dass Sie wahrscheinlich falsch tippen, z. B. wenn Siegit rebase -i 881129d771219cfa29e6f6c2205851a2994a88
das Fehlen^
am Ende tun , sollten Sie den Editor ohne Speichern verlassen und den Grund herausfinden:noop
Problem gibt, ändern Sie einfach das Wortpick
inreword
. Anderes bleibt erhalten (Sie bearbeiten die Commit-Nachricht an dieser Stelle nicht). Beispiel:git push -u origin master --force
oder<how you push normally> --force
. Der Schlüssel ist hier--force
.Weitere Informationen finden Sie in der Dokumentation .
quelle