Ich habe einen Arbeitsbaum mit 3 Commits:
My ~ myproject git: (master) git log
commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <[email protected]>
Date: Thu Aug 16 00:59:05 2012 +0200
.gitignore edits
commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <[email protected]>
Date: Mon Aug 13 01:36:39 2012 +0200
Create .gitignore file
commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <[email protected]>
Date: Mon Aug 13 01:13:05 2012 +0200
Initial commit (with a misleading message)
Jetzt möchte ich reword
die Commit-Nachricht meines ersten Commits (6707a66)
My ~ myproject git: (master) git rebase -i 6707
(… Vim betreten)
pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits
# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
In diesem Fall möchte ich die reword
betreffende Commit-Nachricht ( im Git-Sprachgebrauch) korrigieren :
Erstes Festschreiben (mit einer irreführenden Meldung)
… Zu etwas Passendem.
Es ist nicht überraschend, dass mein obiger Versuch nicht erfolgreich war, da das erste Commit offensichtlich kein übergeordnetes Commit enthält. (Und wenn Sie rebase
, müssen Sie das nächstälteste Commit vor dem gewünschten verweisen reword
, oder?)
Der Kern meiner Frage: Können Sie dies also auf andere Weise erreichen?
Antworten:
Machen
git rebase -i --root
(
root
Zeigen Sie auf , anstatt auf ein bestimmtes Commit zu zeigen.)Auf diese Weise ist auch das erste Commit enthalten und Sie können einfach
reword
es wie jedes andere Commit ausführen.Die
--root
Option wurde in Gitv1.7.12
(2012) eingeführt. Zuvor war die einzige Option die Verwendung vonfilter-branch
oder--amend
, was normalerweise schwieriger ist.Hinweis: Siehe auch diese ähnliche Frage und Antwort .
quelle
Sie können immer verwenden
git filter-branch --msg-filter
:quelle
-f
, werden die Commits des angegebenen Zweigs immer neu geschrieben. Der Zweigreferenzwert vom ersten Mal wurde in gespeichertrefs/original/master
, bevor Sie den Befehl ausgeführt haben.Das Wesentliche von pcreux bietet eine gute Möglichkeit, das erste Commit neu zu formulieren:
quelle
git rebase -i --root
ist die Art und Weise, zu gehen , wie durch florisla vorgeschlagen.