Aus faulen Gründen habe ich eine Reihe von Commits mit Standardnachrichten gepusht, und jetzt ist es umständlich geworden, da ich nicht wirklich weiß, was ich bei jedem Commit geändert habe.
Wie bearbeite ich nur die Nachrichten früherer Commits und behalte (wenn möglich) den Commit-Baum?
Antworten:
Um die Festschreibungsnachrichten einer Reihe von Festschreibungen zu bearbeiten, führe ich aus
Wo
firstsha
ist eine Kennung für das übergeordnete Commit des ersten Commits, das ich bearbeiten möchte? (Sie können hier eine beliebige gültige Referenz verwenden,git rebase -i HEAD~4
um die letzten vier Commits anzuzeigen.)Ändern Sie im sich öffnenden Editor alle "Auswahl" -Einträge in "Umformulieren" für Commits, die Sie ändern möchten, und schließen Sie dann den Editor. Sie werden dann aufgefordert, Festschreibungsnachrichten für alle von Ihnen ausgewählten Festschreibungen einzugeben.
Beachten Sie, dass dadurch der Festschreibungsbaum geändert wird , da sich die Hashes der Festschreibungen ändern. Sie müssen Ihren neuen Baum erzwingen oder auf einen neuen Zweig verschieben. Außerdem werden Zusammenführungen durcheinander gebracht. Vermeiden Sie daher das Bearbeiten von Zusammenführungs-Commits.
Führen Sie aus, um nur das letzte Commit schnell zu bearbeiten
(aber hüte dich vor allem, was für das Festschreiben inszeniert ist).
quelle
preserve-merges
)Was Sie suchen, ist
git rebase
.Wenn Sie nur die vorherige
git commit
Nachricht ändern möchten, müssen Sie nur Folgendes verwenden:Nehmen Sie die gewünschten Änderungen am vorherigen Commit vor und speichern Sie die Änderungen.
Wenn Sie jedoch ältere Commits ändern müssen, müssen Sie diese verwenden
rebase
.Dabei entspricht N der Anzahl der Commits, zu denen Sie zurückkehren möchten, z. B. 2 oder 12 oder 6 usw. usw.
Hier sollten Sie einen Texteditor mit Ihren Commits erhalten. Ändern Sie die Option von
pick
bisreword
, um die Nachricht zu ändern.Wenn Sie alle Commits identifiziert haben, die Sie ändern möchten, und deren Optionen entsprechend geändert haben, speichern und schließen Sie den Editor. Nehmen Sie dann die Änderungen an jeder Festschreibungsnachricht vor. Sobald Sie zufrieden sind, können Sie laufen:
Und Sie sollten Ihren Git-Verlauf beibehalten, wenn auch mit unterschiedlichen Hash-Werten, da Sie die erforderlichen Änderungen vorgenommen haben. Hier sind einige zusätzliche Links, die Sie überprüfen sollten:
7.6 Git Tools - Umschreiben des Verlaufs
GitHub-Hilfe - Ändern einer Commit-Nachricht
StackOverflow - Frage zum Ändern alter Commit-Nachrichten
quelle
commit --amend
", es sei denn , Sie bringen den Festschreibungsprozess irgendwie durcheinander.git rebase -i firstsha
dassfirstsha
Eltern Hash zu begehen ist von der Commit , dass ich die Nachricht, dann in Editor, ändern sich ändern wollen würde ,pick
umreword
,enter
neue Nachricht, dann Ausgabegit rebase --continue
und tungit push --force
?git rebase -i HEAD~N
N die Anzahl der Commits ist, die Sie zurück möchten. Ändern Sie jede Option verpflichten, den Sie bearbeiten möchten die Botschaft auspick
zureword
, speichern Sie diese Datei, die Änderungen an jedem dieser begehen Dateien und speichern diese. Sobald Sie sicher sind, dass Sie fertig sind, brauchen Sie nur nochgit push --force [Name of git branch you are were working on]
. Sie können jederzeit zurückgehen und dies erneut oder schrittweise tun.