web-dev-qa-db-fra.com

Changer le message de git commit après Push (étant donné que personne n’a été retiré de la télécommande)

J'ai fait un commit git et un push ultérieur. Je voudrais changer le message de commit. Si je comprends bien, cela n'est pas conseillé car quelqu'un aurait peut-être extrait du référentiel distant avant de procéder à de telles modifications. Et si je sais que personne n'a tiré? 

Y a-t-il un moyen de faire cela?

781
K_U

Histoire changeante

S'il s'agit du commit le plus récent, vous pouvez simplement faire ceci:

git commit --amend

Ceci fait apparaître l'éditeur avec le dernier message de validation et vous permet de modifier le message. (Vous pouvez utiliser -m si vous souhaitez effacer l'ancien message et en utiliser un nouveau.)

Poussant

Et puis quand vous poussez, faites ceci:

git Push --force-with-lease <repository> <branch>

Ou vous pouvez utiliser "+":

git Push <repository> +<branch>

Ou vous pouvez utiliser --force:

git Push --force <repository> <branch>

Soyez prudent lorsque vous utilisez ces commandes.

  • Si quelqu'un d'autre insère des modifications dans la même branche, vous souhaitez probablement éviter de les détruire. L'option --force-with-lease est la plus sûre, car elle sera abandonnée s'il y a des modifications en amont (

  • Si vous ne spécifiez pas explicitement la branche, Git utilisera les paramètres Push par défaut. Si votre paramètre Push par défaut est "matching", vous pouvez alors détruire les modifications de plusieurs branches à la fois. 

Tirer/aller chercher ensuite

Tous ceux qui ont déjà tiré vont maintenant recevoir un message d'erreur et ils devront mettre à jour (en supposant qu'ils ne font pas de changements eux-mêmes) en faisant quelque chose comme ça:

git fetch Origin
git reset --hard Origin/master # Loses local commits

Soyez prudent lorsque vous utilisez reset --hard. Si vous apportez des modifications à la branche, ces modifications seront détruites.

Une note sur la modification de l'historique

Les données détruites sont en réalité l’ancien message de validation, mais --force ne le sait pas et supprimera volontiers d’autres données. Pensez donc à --force comme "Je veux détruire des données et je sais avec certitude quelles données sont en train d'être détruites." Mais lorsque les données détruites sont validées, vous pouvez souvent récupérer les anciens commits du journal (les données sont en réalité orphelines au lieu de les détruire].

Si vous ne pensez pas détruire les données, éloignez-vous de --force... de mauvaises choses peuvent arriver .

C'est pourquoi --force-with-lease est un peu plus sûr.

1151
Dietrich Epp

Dis le :

git commit --amend -m "New commit message"

et alors

git Push --force
351
Manish Shrivastava

Pourrait être en retard à la fête, voici une réponse que je ne vois pas ici.

Step1 : git rebase -i HEAD~n pour créer une rebase interactive pour la dernière modification n affectée.

git fera apparaître un éditeur pour gérer ces commits, remarquez cette commande: # r, reword = use commit, but edit the commit message, c'est exactement ce dont nous avons besoin.

Étape 2 : remplacez pick par r pour les commits pour lesquels vous souhaitez mettre à jour le msg . Enregistrez et fermez l'éditeur.

Step3 : dans les fichiers de validation suivants, mettez à jour le message de validation à votre guise

Étape 4 : après que tous les commits soient envoyés, les messages sont mis à jour. vous voudrez peut-être faire git Push -f pour mettre à jour la télécommande.

181
Jinsong Li

Utilisez ces deux étapes dans la console:

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

et alors

git Push -f

Terminé :)

37
Abdul Rizwan

Il est à noter que si vous utilisez Push --force avec plusieurs références, ils seront TOUS modifiés en conséquence. Assurez-vous de bien indiquer où votre dépôt Git est configuré pour Push to. Heureusement, il existe un moyen de protéger légèrement le processus en spécifiant une seule branche à mettre à jour. Lisez les pages de manuel de git:

Notez que --force s'applique à toutes les références qui sont poussées, et donc à l'aide de avec Push.default réglé sur correspondant ou avec plusieurs Push les destinations configurées avec remote. *. Push peuvent écraser les références autres que que la branche actuelle (y compris les références locales strictement situées derrière leur homologue distante). Pour forcer un Push à une seule branche, utilisez un + devant le refspec to Push (par exemple, git Push Origin + master to force a Push vers la branche master).

18
Steve Benner

Si vous souhaitez modifier un commit plus ancien, pas le dernier, vous devrez utiliser la commande rebase comme expliqué ici, page d'aide Github , dans la section Modification du message de plusieurs messages de commit plus anciens

11
Carlos

Commande 1 .

git commit --amend -m "New and correct message"

Ensuite,

Commande 2 .

git Push Origin --force
7
Teo Choong Ping
git commit --amend

puis éditez puis changez le message dans la fenêtre en cours. Après cela

git Push --force-with-lease
3
Beulah Sheeba

Cela fonctionne assez bien pour moi, 

git checkout Origine/nom de la branche

si vous êtes déjà dans la branche alors il vaut mieux faire tirer ou rebasonner

git pull

ou 

git -c core.quotepath=false fetch Origin --progress --Prune

Plus tard, vous pouvez simplement utiliser

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

ou si vous voulez ouvrir l'éditeur de texte, utilisez

git commit --amend

Je préférerai utiliser l'éditeur de texte si vous avez beaucoup de commentaires. Vous pouvez définir votre éditeur de texte préféré avec la commande

git config --global core.editor your_preffered_editor_here

Quoi qu’il en soit, quand vous avez fini de changer le message de commit, sauvegardez-le et quittez

puis courir

git Push --force

Et tu as fini

1
Hasasn

Une autre option consiste à créer une "validation d'errata" supplémentaire (et Push) faisant référence à l'objet de validation contenant l'erreur. La nouvelle validation d'errata fournit également la correction. Une validation errata est une validation sans modification de code de fond, mais un message de validation important. Par exemple, ajoutez un espace dans votre fichier Lisez-moi et validez cette modification avec le message de validation important, ou utilisez l'option git --allow-empty. C’est certainement plus facile et plus sûr que de changer de base, cela ne modifie pas l’histoire réelle et garde l’arbre de branche propre (utiliser amend est également un bon choix si vous corrigez le dernier commit, mais un commit errata peut être un bon choix pour anciens commets). Ce genre de chose arrive si rarement que le simple fait de documenter l'erreur est suffisant. À l'avenir, si vous devez rechercher dans un journal git un mot-clé de fonctionnalité, le commit original (erroné) risque de ne pas s'afficher car le mot de passe incorrect a été utilisé dans ce commit original (la faute de frappe d'origine). Toutefois, le mot-clé apparaîtra. dans le commit d'errata qui vous indiquera ensuite le commit d'origine contenant la faute de frappe. Voici un exemple:

 $ git log 
 commit 0c28141c68adae276840f17ccd4766542c33cf1d
Auteur: premier dernier 
 Date: mer. août 8 15:55:52 2018-0600 

 Errata commit: 
 Ce commit n'a pas de changement de code important .
 Ce commit est fourni uniquement pour documenter une correction à un message de commit précédent .
 Ceci concerne l'objet commit e083a7abd8deb5776cb304fa13731a4182a24be1 
 Message de validation incorrect d'origine: 
 Couleur de fond changée en rouge 
 Correction (* changement mis en évidence *): 
 Couleur d'arrière-plan modifiée en * bleu * 

 Commettre 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
Author: Premier Dernier 
 Date: mer. Août 8 15:43:16 2018 - 0600. Un message de validation provisoire 

 Commit e083a7abd8deb5776cb304fa13731a4182a24be1
Author: premier dernier 
: Mer. Août 8 13:31:32 2018-0600 

 Couleur de fond changée en rouge 
1
rob_7cc

informations supplémentaires pour le même problème si vous utilisez bitbucket pipeline

modifier votre message

git commit --amend

Pousser au serveur 

git Push --force <repository> <branch>

puis ajoutez --force à votre commande Push sur le pipeline 

git ftp Push --force

Cela supprimera votre ou vos précédentes validations et poussera votre actuel.

enlever le --force après le premier push 

je l'ai essayé sur le pipeline bitbucket et son bon fonctionnement