wake-up-neo.com

Bearbeiten Sie das Root-Commit in Git?

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 (das kein übergeordnetes Element hat)?

295
13ren

Angenommen, Sie haben einen sauberen Arbeitsbaum, 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
252
CB Bailey

Ab Git-Version 1.7.12 können Sie jetzt verwenden

git rebase -i --root
512
ecdpalma

Zum Erweitern von ecdpalmas Antwort können Sie jetzt die Option --root Verwenden, um rebase mitzuteilen, dass Sie das Root/First Commit neu schreiben möchten:

git rebase --interactive --root

Anschließend wird das Root-Commit in der Liste der TODO-Neueinstellungen angezeigt, und Sie können auswählen, ob Sie es bearbeiten oder neu formulieren möchten:

reword <root commit sha> <original message>
pick <other commit sha> <message>
...

Dies ist die Erklärung von --root Aus die Git-Rebase-Dokumentation (Hervorhebung meiner):

Setzen Sie alle Commits zurück, die über <branch> Erreichbar sind, anstatt sie mit einem <upstream> Einzuschränken. Hiermit können Sie die Root-Festschreibung (en) für einen Zweig wiederherstellen.

61
user456814

Nur um eine Alternative zu den höher bewerteten Antworten zu bieten:

Wenn Sie ein Repo erstellen und wissen, dass Sie in Zukunft auf dem "ersten" echten Commit aufbauen, können Sie dieses Problem ganz vermeiden, indem Sie zu Beginn ein explizites leeres Commit ausführen:

git commit --allow-empty -m "Initial commit"

und erst dann beginnen "echte" Commits zu machen. Dann können Sie ganz einfach auf diese Weise einen Rebase durchführen, zum Beispiel git rebase -i HEAD^

12
jakub.g

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
4
Alexander Groß