J'ai un arbre de travail contenant 3 commmits:
➜ ~ monprojet git: (maître) 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)
Maintenant, je souhaite reword
le message de validation de mon premier commit (6707a66)
➜ ~ monprojet git: (maître) git rebase -i 6707
(… En entrant vim)
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
Dans ce cas, je souhaite corriger ( reword
dans le langage git) le message de commit en question:
Commit initial (avec un message trompeur)
… À quelque chose d'approprié.
Sans surprise, ma tentative ci-dessus n'a pas réussi car le premier commit n'a évidemment aucun commit parent . (Et quand vous rebase
, vous devez référencer le prochain commit le plus ancien avant celui que vous souhaitez reword
, non?)
L'essentiel de ma question, par conséquent, pouvez-vous y parvenir par tout autre moyen de le faire?
Réponses:
Faire
git rebase -i --root
(pointez vers
root
au lieu de pointer vers un commit spécifique)De cette façon, le premier commit est également inclus et vous pouvez le faire
reword
comme n'importe quel autre commit.L'
--root
option a été introduite dans Gitv1.7.12
(2012). Auparavant, la seule option était d'utiliserfilter-branch
ou--amend
, ce qui est généralement plus difficile à faire.Remarque: voir également cette question et réponse similaires .
la source
Vous pouvez toujours utiliser
git filter-branch --msg-filter
:la source
-f
il ira de l'avant et réécrira toujours les commits de la branche donnée. La valeur de référence de branche de la première fois a été enregistrée dansrefs/original/master
, avant que vous exécutiez la commande.L'essentiel de pcreux a un bon moyen de reformuler le premier commit:
la source
git rebase -i --root
c'est la voie à suivre, comme suggéré par florisla.