Bearbeiten Sie den Stammbeschwerden in Git?
-
22-09-2019 - |
Frage
Es gibt Möglichkeiten, die Nachricht von 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 Commit -Nachricht des allerersten Commits ändern (was kein Elternteil hat)?
Lösung
Angenommen, Sie haben einen sauberen, funktionierenden Baum, können Sie Folgendes tun.
# checkout the root commit
git checkout <sha1-of-root>
# amend the commit
git commit --amend
# rebase all the other commits in master onto the amended root
git rebase --onto HEAD HEAD master
Andere Tipps
Ab der Git -Version 1.7.12, Sie können jetzt verwenden
git rebase -i --root
Erweitern ECDPALMA -Antwort, Sie können jetzt die verwenden --root
Option zu erzählen rebase
dass Sie das Root/First Commit neu schreiben möchten:
git rebase --interactive --root
Anschließend wird das Root Commit in der Liste von Rebase Todo angezeigt, und Sie können auswählen, um es zu bearbeiten oder neu zu formulieren:
reword <root commit sha> <original message>
pick <other commit sha> <message>
...
Dies ist die Erklärung von --root
aus Die Git -Rebase -Dokumente (Hervorhebung meiner):
Alle Commits erreichen erreichbar aus
<branch>
, anstatt sie mit einem einzuschränken<upstream>
. Auf diese Weise können Sie das Root Commit (en) in einem Zweig wiederherstellen.
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 wiedergeboren werden, können Sie dieses Problem insgesamt vermeiden, indem Sie zu Beginn ein explizites leeres Commiting machen:
git commit --allow-empty -m "Initial commit"
Und erst dann beginnen Sie "echte" Commits. Dann können Sie beispielsweise auf den Standardweg auf den Standardweg wieder aufnehmen git rebase -i HEAD^
Du könntest benutzen git filter-branch
:
cd test
git init
touch initial
git add -A
git commit -m "Initial commit"
touch a
git add -A
git commit -m "a"
touch b
git add -A
git commit -m "b"
git log
-->
8e6b49e... b
945e92a... a
72fc158... Initial commit
git filter-branch --msg-filter \
"sed \"s|^Initial commit|New initial commit|g\"" -- --all
git log
-->
c5988ea... b
e0331fd... a
51995f1... New initial commit