Es gibt Möglichkeiten, die Nachricht aus späteren Commits zu ändern:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
Wie können Sie die Festschreibungsnachricht des allerersten Festschreibens ändern (das kein übergeordnetes Element hat)?
git filter-branch --msg-filter
Antworten:
Angenommen, Sie haben einen sauberen Arbeitsbaum, können Sie Folgendes tun.
quelle
git rebase --onto HEAD <sha1-of-root> master
.git rebase
.git rebase
Wendet Commits in <branch> (master
) an, die nicht in <upstream> enthalten sind.HEAD
ist nicht inmaster
, also versucht Ihre Version, alle anzuwendenmaster
.git rebase --onto HEAD <sha1-of-root>
Master handelt, in<sha1-of-root>
dem derselbe verwendet wirdgit checkout <sha1-of-root>
. Andernfalls haben Sie 2first commit
.HEAD
stellt sicher, dass alle Commits berücksichtigt werden und dass wir die Zwei-Parameter-Version von Rebase verwenden können, um zurück zum Master zu gelangen. Bitte beachten Sie, dass diese Antwort vor dem Bestehen der--root
Option zum erneuten Basieren liegt.Ab Git Version 1.7.12 können Sie jetzt verwenden
Dokumentation
quelle
Um die Antwort von ecdpalma zu erweitern , können Sie jetzt die
--root
Option verwenden, um anzugeben ,rebase
dass Sie das root / first commit neu schreiben möchten:Dann wird das Root-Commit in der Rebase-TODO-Liste angezeigt, und Sie können auswählen, ob Sie es bearbeiten oder umformulieren möchten:
Dies ist die Erklärung
--root
aus den Git-Rebase-Dokumenten (Hervorhebung von mir):quelle
Nur um eine Alternative zu den höher bewerteten Antworten zu bieten:
Wenn Sie ein Repo erstellen und im Voraus wissen, dass Sie in Zukunft zusätzlich zu seinem "ersten" echten Commit neu aufbauen werden, können Sie dieses Problem insgesamt vermeiden, indem Sie zu Beginn ein explizites leeres Commit durchführen:
und erst dann anfangen "echte" Commits zu machen. Dann können Sie das Commit beispielsweise auf die übliche Weise einfach neu aufbauen
git rebase -i HEAD^
quelle
.gitattributes
Datei zu platzieren, anstatt ein leeres Commit durchzuführen.Sie könnten verwenden
git filter-branch
:quelle
-- --all
Option ist in diesem Fall tatsächlich der Schlüssel, um auch das Root-Commit verarbeiten zu können.