135 votes

Comment reformuler le tout premier message de commit git ?

J'ai un arbre de travail contenant 3 commmandes :

~myproject git :(master) git log

commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <my@mail.com>
Date:   Thu Aug 16 00:59:05 2012 +0200

    .gitignore edits

commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <my@mail.com>
Date:   Mon Aug 13 01:36:39 2012 +0200

    Create .gitignore file

commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <my@mail.com>
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 engagement (6707a66)

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

( en 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 en langage git) le message de livraison en question :

Validation initiale (avec un message trompeur)

à quelque chose d'approprié.

Sans surprise, ma tentative ci-dessus n'a pas abouti puisque le premier commit n'a évidemment pas de parent s'engager. (Et lorsque vous rebase vous devez faire référence au commit le plus ancien avant à celui que vous souhaitez reword n'est-ce pas ?)

L'essentiel de ma question est donc de savoir si vous pouvez y parvenir par d'autres moyens.

259voto

florisla Points 956

Faites git rebase -i --root

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

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

El --root a été introduite dans Git v1.7.12 (2012). Avant cela, la seule option était d'utiliser filter-branch o --amend ce qui est généralement plus difficile à faire.

Note : voir également cette question et réponse similaire .

13voto

Douglas Points 10417

Le gist de pcreux a une bonne façon 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

12voto

fork0 Points 2080

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X