Ich möchte eine Commit-Nachricht tiefer in der Geschichte ändern und habe viele neue Commits gepusht.
Wie ändere ich die Commit-Nachricht? Ist es möglich?
quelle
Ich möchte eine Commit-Nachricht tiefer in der Geschichte ändern und habe viele neue Commits gepusht.
Wie ändere ich die Commit-Nachricht? Ist es möglich?
Die Nachricht von Linus Torvalds kann Ihre Frage beantworten:
Ändern / bearbeiten Sie alte Commit-Nachrichten
Kurze Antwort: Sie können nicht (wenn gedrückt).
Auszug (Linus bezeichnet BitKeeper als BK):
Randnotiz, nur aus historischem Interesse: In BK könnte man.
Und wenn Sie daran gewöhnt sind (wie ich), war es wirklich sehr praktisch. Ich würde eine Patchbombe von Andrew anwenden, feststellen, dass etwas nicht stimmt, und sie einfach bearbeiten, bevor ich sie herausschiebe.
Ich hätte dasselbe mit git machen können. Es wäre einfach genug gewesen, nur die Festschreibungsnachricht nicht Teil des Namens zu machen und dennoch zu garantieren, dass der Verlauf unberührt blieb, und die Sache "Kommentare später korrigieren" zuzulassen.
Aber ich habe es nicht getan.
Ein Teil davon ist reine "interne Konsistenz". Git ist einfach ein saubereres System, da alles SHA1-geschützt ist und alle Objekte unabhängig vom Objekttyp gleich behandelt werden. Ja, es gibt vier verschiedene Arten von Objekten, und sie sind alle sehr unterschiedlich, und sie können nicht auf die gleiche Weise verwendet werden, aber gleichzeitig funktionieren sie konzeptionell alle genau , auch wenn ihre Codierung auf der Festplatte unterschiedlich sein kann das Gleiche.
Aber interne Konsistenz ist keine Entschuldigung dafür, unflexibel zu sein, und es wäre natürlich sehr flexibel, wenn wir Fehler einfach beheben könnten, nachdem sie aufgetreten sind. Das ist also kein wirklich starkes Argument.
Der wahre Grund, warum Sie mit git die Commit-Nachricht nicht ändern können, ist sehr einfach: Auf diese Weise können Sie den Nachrichten vertrauen. Wenn Sie Personen erlaubt haben, sie später zu ändern, sind die Nachrichten von Natur aus nicht sehr vertrauenswürdig.
Um vollständig zu sein, Sie könnten Ihre lokale begehen Geschichte um umschreiben zu reflektieren , was Sie wollen, wie von sykora vorgeschlagen (mit einer gewissen Fütterungsmaterial und Reset --hard, Keuchen!)
Sobald Sie jedoch Ihren überarbeiteten Verlauf erneut veröffentlichen (mit einem git push origin +master:master
, dem +
Zeichen, das den Push erzwingt, auch wenn dies nicht zu einem "Schnellvorlauf" -Commit führt), können Probleme auftreten .
Auszug aus dieser anderen SO-Frage:
Ich habe tatsächlich einmal mit --force in das git.git-Repository gepusht und wurde von Linus BIG TIME beschimpft. Es wird viele Probleme für andere Menschen schaffen. Eine einfache Antwort lautet "Tu es nicht".
Derzeit könnte ein Git-Ersatz den Trick machen.
Im Detail: Erstellen Sie einen temporären Arbeitszweig
Zum Ersetzen auf das Commit zurücksetzen
Ändern Sie das Commit mit der richtigen Nachricht
Ersetzen Sie das alte Commit durch das neue
Geh zurück zu dem Zweig, in dem du warst
temporären Zweig entfernen
drücken
getan.
quelle
Sie können
git rebase -i
'i' (für den Zweig, von dem Sie verzweigt haben) für interaktive Zwecke verwenden .Ersetzen Sie den
pick
neben dem Commit-Kommentar, den Sie ändern möchten, durchr
(oderreword
), speichern und beenden Sie ihn. Anschließend können Sie die Bearbeitung vornehmen.git push
noch einmal und du bist fertig!quelle
-p
Argument,rebase
welchep
Reserven verschmelzen.Angenommen, Sie haben einen Baum wie diesen:
Zunächst
checkout
ein temporärer Zweig:Beim
temp
Verzweigenreset --hard
zu einem Commit, dessen Nachricht Sie ändern möchten (z. B. ist dieses Commit946992
):Verwenden Sie
amend
diese Option , um die Nachricht zu ändern:Danach sieht der Baum folgendermaßen aus:
Verwenden Sie dann
cherry-pick
alle Commits, die vor946992
vonmaster
to liegen,temp
und legen Sie sie fest,amend
wenn Sie auch ihre Nachrichten ändern möchten:Der Baum sieht jetzt so aus:
Drücken Sie nun den temporären Zweig zwangsweise auf Remote:
Der letzte Schritt: Zweig
master
auf lokaler Ebene löschen ,git fetch origin
Zweigmaster
vom Server abrufen, dann zu Zweig wechseln und Zweigmaster
löschentemp
.Jetzt werden sowohl Ihre lokalen als auch Ihre Remote-Nachrichten alle Nachrichten aktualisiert.
quelle
In unserem Shop habe ich die Konvention eingeführt, erkennbar benannte kommentierte Tags zu Commits mit falschen Nachrichten hinzuzufügen und die Anmerkung als Ersatz zu verwenden.
Auch wenn dies Leuten, die gelegentliche "Git Log" -Befehle ausführen, nicht hilft, bietet es uns die Möglichkeit, falsche Bug-Tracker-Referenzen in den Kommentaren zu beheben, und alle meine Build- und Release-Tools verstehen die Konvention.
Dies ist offensichtlich keine generische Antwort, aber es könnte etwas sein, das die Leute in bestimmten Gemeinschaften übernehmen können. Ich bin sicher, wenn dies in größerem Maßstab verwendet wird, kann irgendwann eine Art Porzellanträger dafür auftauchen ...
quelle
(Von http://git.or.cz/gitwiki/GitTips#head-9f87cd21bcdf081a61c29985604ff4be35a5e6c0 )
Ich denke, das sollte deine Frage beantworten. Beachten Sie jedoch, dass wenn Sie gedrückt Code zu einem Remote - Repository und die Leute von ihm gezogen haben, dann wird dies zu vermasseln ihren Code Geschichten gehen, sowie die Arbeit , die sie getan haben. Also mach es vorsichtig.
quelle
Wenn Sie Git-Erweiterungen verwenden: Gehen Sie zum Festschreibungsbildschirm. Unten sollte ein Kontrollkästchen mit der Aufschrift "Commit ändern" angezeigt werden (siehe unten):
quelle