Poussée accidentellement: changez le message de commit

Dans mon repo local, j’ai un commit avec un message de validation incorrect.

J’ai déjà publié le message de validation incorrect avec git push .

Maintenant, le repository distant (hébergé par GitHub) a également un message de validation incorrect.

J’ai déjà essayé git commit --amend , mais j’ai trouvé que cela ne fonctionnerait pas dans cette situation car j’ai effectué des commits supplémentaires depuis le mauvais.

Comment répareriez-vous cette situation?

La solution la plus simple ( mais veuillez lire toute cette réponse avant de le faire ):

  1. git rebase -i
  2. Dans l’éditeur qui s’ouvre, changez le pick pour reword la ligne pour la validation incorrecte.
  3. Enregistrez le fichier et fermez l’éditeur.
  4. L’éditeur s’ouvrira à nouveau avec le message de validation incorrect. Répare le.
  5. Enregistrez le fichier et fermez l’éditeur.
  6. git push --force pour mettre à jour GitHub.

Cela signifie que vous allez publier une version modifiée d’un référentiel précédemment publié. Si quelqu’un a tiré ou récupéré de votre repo entre le moment où vous avez commis l’erreur avec le message de validation incorrect et lorsque vous l’avez corrigé, il rencontrera des difficultés plus tard. Donc, assurez-vous que vous pouvez accepter cette conséquence avant d’essayer.

Plutôt que de suivre l’intégralité de l’itinéraire de rebase pour une validation:

 git reset --soft head~ git commit -m "The message you wanted to use" git push -f 

Vous pouvez voir les options dans la page de manuel git-reset .

Pour un projet sur lequel vous travaillez uniquement, l’historique modifié ne devrait pas poser de problème.

Si vous devez modifier un ancien message de validation sur plusieurs twigs (par exemple, la validation avec le message erroné est présente dans plusieurs twigs), vous pouvez utiliser

 git filter-branch -f --msg-filter 'sed "s///g"' -- --all 

pour remplacer le message de validation.

Git créera un répertoire temporaire pour la réécriture et sauvegardera les anciennes références dans refs / original /.

-f va exécuter l’exécution de l’opération. Ceci est nécessaire si le répertoire temporaire est déjà présent ou s’il existe déjà des références stockées sous refs / original . Si ce n’est pas le cas, vous pouvez déposer ce drapeau.

-- sépare les options de twig de filtre des options de révision

--all s’assurera que toutes les twigs et les balises sont réécrites.

Grâce à la sauvegarde de vos anciennes références, vous pouvez facilement revenir à l’état avant d’exécuter la commande.

Dites, vous voulez récupérer votre maître et y accéder dans la twig old_master:

 git checkout -b old_master refs/original/refs/heads/master 

Une fois que vous êtes satisfait de vos modifications, utilisez git push -f pour transmettre les modifications à votre référentiel public.

Notez que vous devez en informer vos collaborateurs car tous les hachages des commits commençant par le premier modifié ont été modifiés.

Si vous n’êtes pas poussé le code vers votre twig distante (Github / Bitbucket), vous pouvez modifier le message de validation sur la ligne de commande comme ci-dessous.

  git commit --amend -m "Your new message" 

Si vous travaillez sur une twig spécifique, faites-le.

 git commit --amend -m "BRANCH-NAME: new message" 

Si vous avez déjà poussé le code avec un message erroné, vous devez faire attention lorsque vous modifiez le message. c’est-à-dire après avoir modifié le message de validation et essayé de le repousser, vous vous retrouvez avec des problèmes. Pour le faire en douceur, suivez ces étapes. S’il vous plaît lire la réponse entière avant de le faire

 git commit --amend -m "BRANCH-NAME : your new message" git push -f origin BRANCH-NAME # Not a best practice. Read below why? 

Remarque importante: lorsque vous utilisez directement la force push, vous risquez de rencontrer des problèmes de code que d’autres développeurs travaillent sur la même twig. Donc, pour éviter les conflits, vous devez retirer le code de votre twig avant de lancer la force.

  git commit --amend -m "BRANCH-NAME : your new message" git pull origin BRANCH-NAME git push -f origin BRANCH-NAME 

C’est la meilleure pratique lors de la modification du message de validation, s’il était déjà activé.