Comment reformuler le tout premier message de commit git?

J’ai un arbre de travail contenant 3 commmits:

➜ ~ myproject git: (master) git log

 commit a99cce8240495de29254b5df8745e41815db5a75 Author: My Name  Date: Thu Aug 16 00:59:05 2012 +0200 .gitignore edits commit 5bccda674c7ca51e849741290530a0d48efd69e8 Author: My Name  Date: Mon Aug 13 01:36:39 2012 +0200 Create .gitignore file commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3 Author: My Name  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)

➜ ~ myproject git: (master) git rebase -i 6707

(… Entrant dans 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 git parlance) le message de validation en question:

Commit initial (avec un message trompeur)

… À quelque chose de approprié.

Sans surprise, ma tentative ci-dessus n’a pas réussi car le premier commit n’a manifestement aucun engagement de parent . (Et quand vous rebase , vous devez référencer le prochain commit le plus ancien avant celui que vous souhaitez reword , non?)

L’essence de ma question, donc, pouvez-vous y parvenir par d’autres moyens?

    Ne git rebase -i --root

    (pointez sur root au lieu de pointer sur un commit spécifique)

    De cette façon, le commit racine est également inclus et vous pouvez simplement le reword comme tout autre commit.

    D’autres approches plus élaborées existent, mais la plupart sont antérieures à l’ajout de l’option «–root» dans «v1.7.12», à partir de 2012.

    Vous pouvez toujours utiliser git filter-branch --msg-filter :

     git filter-branch --msg-filter \ 'test $GIT_COMMIT = '$(git rev-list --reverse master |head -n1)' && echo "Nice message" || cat' master 

    L’empreinte de pcreux a un bon moyen de reformuler le premier commit:

     # You can't use rebase -i here since it takes the parent commit as argument. # You can do the following though: git checkout FIRST_COMMIT_SHA && git commit --amend && git rebase HEAD master