176 votes

Modifier un vieux message de commit sur Git

J'ai essayé de modifier un vieux message de commit, comme expliqué ici.

Le truc c'est que maintenant, quand j'essaye d'exécuter rebase -i HEAD~5 il est dit interactive rebase already started.

Alors j'ai essayer: git rebase --continue mais eu cette erreur:

error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba
fatal: Cannot lock the ref 'refs/heads/master'.

Des idées?

159voto

VonC Points 414372

Il dit:

Lorsque vous enregistrez et quittez l'éditeur, il va rembobiner vous revient à cette dernière de s'engager dans cette liste et vous laisser tomber sur la ligne de commande avec le message suivant:

$ git rebase -i HEAD~3
Stopped at 7482e0d... updated the gemspec to hopefully work better
You can amend the commit now, with

Cela ne signifie pas:

type nouveau git rebase -i HEAD~3

Essayez de ne pas taper git rebase -i HEAD~3 lors de la sortie de l'éditeur, et il devrait fonctionner correctement.
(sinon, dans votre situation particulière, un git rebase -i --abort peut être nécessaire de réinitialiser tout et vous permettre d'essayer de nouveau)


Comme Dave Vogt mentionne dans les commentaires, git rebase --continue est pour passer à la tâche suivante dans le processus de relocalisation, après que vous avez modifié le premier commit.

Aussi, Gregg Lind mentionne dans sa réponse à l' reword commande d' git rebase:

En remplaçant la commande "ramasser" avec la commande "edit", vous pouvez dire git rebase pour s'arrêter après l'application qui s'engagent, de sorte que vous pouvez modifier les fichiers et/ou le message de commit modifier le commettre, et continuer de rebasage.

Si vous souhaitez simplement modifier le message de commit pour une livraison, remplacer la commande "pick" avec la commande "reword", depuis Git1.6.6 (janvier 2010).

Il fait la même chose ‘edit' pendant un rebase interactif, sauf qu'il vous permet uniquement de modifier le message de commit, sans avoir à retourner le contrôle de la coquille. C'est extrêmement utile.
Actuellement, si vous voulez nettoyer vos messages de validation, vous devez:

$ git rebase -i next

Réglez tous les commits sur "modifier". Ensuite sur chacun d'eux:

# Change the message in your editor.
$ git commit --amend
$ git rebase --continue

L'utilisation de ‘reword"au lieu de"edit' vous permet de sauter l' git-commit et git-rebase des appels.

61voto

Gregg Lind Points 6905

FWIW, git rebase interactif a maintenant une "reformuler" option, ce qui le rend beaucoup moins douloureux!

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