Il y a moyen de changer le message des commits ultérieurs:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
Comment pouvez-vous changer le message de validation de la toute première validation (qui n'a pas de parent)?
En supposant que vous ayez un arbre de travail propre, vous pouvez procéder comme suit.
# 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
A partir de la version Git 1.7.12 , vous pouvez maintenant utiliser
git rebase -i --root
Pour développer réponse d'ecdpalma , vous pouvez maintenant utiliser le --root
option pour indiquer à rebase
que vous souhaitez réécrire la racine/premier commit:
git rebase --interactive --root
Ensuite, la validation root apparaît dans la liste TODO de la base, et vous pouvez choisir de la modifier ou de la reformuler:
reword <root commit sha> <original message>
pick <other commit sha> <message>
...
Ceci est l'explication de --root
de la documentation de la base de données Git (souligné par moi):
Rebase tous les commits accessibles depuis
<branch>
, au lieu de les limiter avec un<upstream>
. Ceci vous permet de redéfinir la base de la validation sur une branche.
Juste pour fournir une alternative aux réponses les mieux notées:
Si vous créez un référentiel et savez dès le départ que vous allez redéfinir la base de son "premier" véritable commit à l'avenir, vous pouvez éviter ce problème en créant un commit vide explicite au début:
git commit --allow-empty -m "Initial commit"
et alors seulement commencer à faire de "vrais" commits. Ensuite, vous pouvez facilement redéfinir la base de cette validation, par exemple git rebase -i HEAD^
Vous pouvez utiliser 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