Changer le message de propagation git après poussée (étant donné que personne n'a tiré de la télécommande)
j'ai fait un git commit et une poussée subséquente. Je voudrais changer le message de commit. Si je comprends bien, ce n'est pas conseillé parce que quelqu'un aurait pu sortir du dépôt distant avant que je fasse de tels changements. Et si je savais que personne n'a tiré?
Est-il un moyen de faire cela?
11 réponses
changer l'histoire
si c'est le plus récent commit, vous pouvez simplement faire ceci:
git commit --amend
Cela fait apparaître l'éditeur avec le dernier message de propagation et vous permet d'éditer le message. (Vous pouvez utiliser -m
si vous souhaitez effacer l'ancien message et utilisez-en un nouveau.)
Pousser
et 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 a poussé les changements à la même branche, vous voulez probablement éviter de détruire ces changements. L'option
--force-with-lease
est la plus sûre, car elle s'arrêtera s'il y a des changements en amont ( -
si vous ne spécifiez pas branche explicitement, Git utilisera les paramètres par défaut. Si votre paramètre push par défaut est "matching", alors vous pouvez détruire des changements sur plusieurs branches en même temps.
Tirant / récupération après
ceux qui ont déjà tiré recevront maintenant 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 ceci:
git fetch origin
git reset --hard origin/master # Loses local commits
faites attention en utilisant reset --hard
. Si vous avez des changements à la branche, ces changements seront détruits.
Une note sur la modification de l'histoire
les données détruites sont en fait juste l'ancien message de propagation, mais --force
ne le sait pas, et supprimera volontiers d'autres données aussi. Alors pensez à --force
comme" je veux détruire des données, et je sais avec certitude quelles données sont détruites."Mais lorsque les données détruites sont peut souvent récupérer de vieilles propagations à partir du reflog-les données sont en fait orphelin au lieu de détruites (bien que les propagations orphelines soient périodiquement supprimées).
si vous ne pensez pas détruire des données, alors restez à l'écart de --force
... les mauvaises choses qui pourrait arriver .
C'est pourquoi --force-with-lease
est un peu plus sûr.
il suffit de dire :
git commit --amend -m "New commit message"
et ensuite
git push --force
Peut-être en retard à la fête, voici une réponse que je ne vois pas ici.
Etape 1 : git rebase -i HEAD~n
faire rebase interactif pour le dernier n
s'engage touchés.
git va faire apparaître un éditeur pour gérer ces propagations, notez cette commande: # r, reword = use commit, but edit the commit message
, c'est exactement ce dont nous avons besoin.
Step2 : changer pick
en r
pour ceux qui s'engage que vous voulez mettre à jour le msg.
Enregistrez et fermez l'éditeur.
Step3 : dans les fichiers de propagation suivants, mettez à jour le msg de propagation comme vous le souhaitez
Step4 : après tout commits msgs sont mis à jour. vous pourriez vouloir faire git push -f
pour mettre à jour la télécommande.
utilisez ces deux étapes dans la console:
git commit --amend -m "new commit message"
et ensuite
git push -f
fait :)
Il convient de noter que si vous utilisez push --force
avec plusieurs refs, ils vont TOUS être modifiés en conséquence. assurez-vous de faire attention à l'endroit où votre git repo est configuré pour pousser. Heureusement, il existe un moyen de sauvegarder légèrement le processus, en spécifiant une seule branche à mettre à jour. Lisez les pages de Git man:
noter que --force s'applique à tous les refs qui sont poussés, donc en utilisant avec push.par défaut définie à ou de correspondance avec plusieurs pousser destinations configurées avec remote.*.poussez peut remplacer les références à d'autres que la branche actuelle (y compris les ref locaux qui sont strictement leur homologue distant). Pour forcer une poussée à une seule branche, utilisez un + devant le refspec pour pousser (E. g git push origin +master to force une poussée de la branche master).
si vous voulez modifier une ancienne commit, pas la dernière, vous devrez utiliser la commande rebase
comme expliqué ici, GitHub help page , sur le modifier le message de messages de commit anciens ou multiples section
commande 1 .
git commit --amend -m "New and correct message"
Puis,
commande 2 .
git push origin --force
git commit --amend
puis éditez puis changez le message dans la fenêtre courante. Après cela faites
git push --force-with-lease
Cela fonctionne pour moi, assez fine,
git checkout origine/branchname
si vous êtes déjà dans la branche alors il est préférable de faire tirer ou rebaser
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 aimez ouvrir texte-éditeur puis utiliser
git commit --amend
je préfère utiliser l'éditeur de texte si vous avez de nombreux commentaires. Vous pouvez définir votre éditeur de texte préféré avec la commande
git config --global core.editor your_preffered_editor_here
de toute façon, quand vous avez fini de changer le message de propagation, enregistrez-le et quittez
puis courir
git push --force
Et vous avez terminé
une autre option est de créer une" errata commit " (et push) supplémentaire qui renvoie à l'objet commit qui contient l'erreur -- la nouvelle errata commit fournit également la correction. Une errata commit est une propagation sans modification substantielle du code mais avec un message de propagation important -- par exemple, ajoutez un caractère d'espace à votre fichier readme et propagez ce changement avec le message de propagation important, ou utilisez l'option git --allow-empty
. Il est certainement plus facile et plus sûr que la relocalisation, c' ne modifie pas l'histoire vraie, et il maintient l'arbre de branches propre (utiliser amend
est aussi un bon choix si vous corrigez la propagation la plus récente, mais une propagation errata peut être un bon choix pour les propagation plus anciennes). Ce genre de chose arrive si rarement qu'il suffit de documenter l'erreur. À l'avenir, si vous devez effectuer une recherche à l'aide d'un journal git pour trouver un mot-clé caractéristique, la propagation originale (erronée) peut ne pas apparaître parce que le mauvais mot-clé a été utilisé dans la propagation originale (la original typo) -- cependant, le mot-clé apparaîtra dans la propagation errata qui vous indiquera alors la propagation originale qui avait la propagation typo. Voici un exemple:
$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d Author: First Last Date: Wed Aug 8 15:55:52 2018 -0600 Errata commit: This commit has no substantive code change. This commit is provided only to document a correction to a previous commit message. This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1 Original incorrect commit message: Changed background color to red Correction (*change highlighted*): Changed background color to *blue* commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 Author: First Last Date: Wed Aug 8 15:43:16 2018 -0600 Some interim commit message commit e083a7abd8deb5776cb304fa13731a4182a24be1 Author: First Last Date: Wed Aug 8 13:31:32 2018 -0600 Changed background color to red
informations supplémentaires pour le même problème si vous utilisez bitbucket pipeline
modifier votre message
git commit --amend
poussée à le rompre
git push --force <repository> <branch>
puis Ajouter -- force à votre commande de poussée sur le pipeline
git ftp push --force
Cela permettra de supprimer votre précédente livraison(s) et pousser votre.
supprimer la -- force après appuyez d'abord sur
je l'ai essayé sur bitbucket pipeline et sa fonctionne bien