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?

727
demandé sur k0pernikus 2012-01-24 05:58:25

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.

1049
répondu Dietrich Epp 2017-05-23 10:31:37

il suffit de dire :

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

et ensuite

git push --force
311
répondu Manish Shrivastava 2018-07-02 15:14:38

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.

154
répondu Jinsong Li 2018-03-08 16:41:24

utilisez ces deux étapes dans la console:

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

et ensuite

git push -f

fait :)

35
répondu Abdul Rizwan 2017-06-19 09:48:45

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).

17
répondu Steve Benner 2014-03-23 23:47:16

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

9
répondu Carlos 2016-10-28 10:43:22

commande 1 .

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

Puis,

commande 2 .

git push origin --force
6
répondu Teo Choong Ping 2017-07-30 13:11:26
git commit --amend

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

git push --force-with-lease
3
répondu Beulah Sheeba 2018-05-12 11:59:43

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é

1
répondu Hasasn 2017-05-12 13:51:53

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
1
répondu rob_7cc 2018-08-09 15:16:03

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

0
répondu Abdallah Awwad Alkhwaldah 2018-09-05 09:26:22