145 votes

Existe-t-il un moyen de modifier un message commit sur GitHub ?

Existe-t-il un moyen de modifier un message commit après avoir commité et poussé sur GitHub ? Je vois qu'il y a une fonction 'ajouter une note' ainsi que des commentaires en ligne, mais pas d'édition réelle d'un message commit. Il y a aussi 'amender commit' dans les extensions git mais cela ne modifie pas le message existant.

197voto

Mureinik Points 3789
  1. git rebase -i <commit hash you want to change>^

    Cela ouvrira votre éditeur par défaut (généralement vi ) avec une liste de commits et des actions pour chacun d'eux. Par défaut, l'action est pick .

  2. Pour tout commit dont vous souhaitez modifier le message, modifiez pick a reword .

  3. Sauvegarder et quitter (en vi : :wq ).

  4. Pour chacun de ces commit, vous obtiendrez un éditeur pour modifier le message commit. Modifiez-le comme bon vous semble, sauvegardez et quittez.

    Une fois que vous avez fini de modifier tous les messages commit, vous reviendrez à l'invite de commande, et vous aurez un nouvel arbre avec les messages mis à jour.

  5. Vous pouvez maintenant les télécharger sur github en utilisant git push origin --force .

Si vous avez juste besoin de corriger votre dernier commit, vous pouvez remplacer les étapes 1-4 par git commit --amend .

35voto

fedrbodr Points 459

Dans Intellij Idea, vous pouvez le faire très facilement.

  1. Contrôle de version ouvert (Historique)
  2. Sélectionnez l'onglet journal
  3. Sélectionnez commit pour changer le commentaire
  4. appuyez sur F2 (Mac fn + F2), et mettez à jour votre message commit.

5voto

KY Lu Points 151

Prémisse :

si votre git-graph ressemble à ...

O   target-commit that you want to change its message [df9c192]
|
O   parent-commit [b7ec061]
|
O

( df9c192 y b7ec061 sont les hachages commit de target-commit et parent-commit, séparément)

Solution :

vous pouvez simplement taper les instructions suivantes...

git reset --soft b7ec061
git commit -m "your_new_description"
git push -f

Explication :

  1. git reset --soft b7ec061 gardera vos changements de fichiers et réinitialisera à parent-commit (i.e. b7ec061)
  2. git commit -m "..." va créer localement un nouveau commit
  3. git push -f poussera votre nouveau commit vers le serveur et remplacera l'ancien (i.e. df9c192)

2voto

rob_7cc Points 131

Une autre option consiste à créer un "errata commit" supplémentaire (et à le pousser) qui référence l'objet commit qui contient l'erreur -- le nouvel errata commit fournit également la correction. Un errata commit est un commit sans modification substantielle du code mais avec un message important commit -- par exemple, ajoutez un caractère d'espace à votre fichier readme et commit ce changement avec le message important commit, ou utilisez l'option git --allow-empty . C'est certainement plus facile et plus sûr que le rebasage, cela ne modifie pas l'historique réel, et cela permet de garder l'arbre de branche propre (en utilisant le module amend est également un bon choix si vous corrigez le commit le plus récent, mais un errata commit peut être un bon choix pour les commit plus anciens). Ce type 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é) peut ne pas apparaître parce que le mauvais mot-clé a été utilisé dans ce commit original (la typo originale) -- cependant, le mot-clé apparaîtra dans l'errata commit qui vous indiquera alors le commit original qui avait la 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

0voto

林果皞 Points 415

Réponse de @Mureinik est bon mais pas compréhensible par un débutant.

Première méthode :

  1. Si vous voulez seulement éditer le dernier message commit, alors vous avez seulement besoin de git commit --amend vous verrez :

    <your existing commit mesage foo bar>

    Please enter the commit message fir your changes. Lines starting

    with # will be ignored, and an empty message aborts the commit.

    #

    Date: Sat Aug 24 17:56:16 2019 +0800

    #

    On branch is up to date with 'origin/master'.

    #

    changes to be committed:

    modified: foo.py

    #

  2. Comme vous pouvez le voir, le message commit est en tête sans aucun préfixe de commande tel que pick c'est déjà le cas page d'édition et vous pouvez diriger modifier le message du haut y sauver&quitter par exemple :

    <your new correction commit message>

    Please enter the commit message for your changes. Lines starting

    ....

  3. Ensuite, faites git push -u origin master --force o <how you push normally> --force . La clé ici est --force .

Deuxième méthode :

  1. Vous pouvez voir le hash commit en git log ou extrait de la url du dépôt, l'exemple dans mon cas est 881129d771219cfa29e6f6c2205851a2994a8835

  2. Alors vous pouvez faire git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835 o git rebase -i HEAD^ (si le plus récent)

  3. Vous verriez :

    pick <commit hash> <your current commit message>

    Rebase 8db7e8b..fa20af3 onto 8db7e8b

    #

    Commands:

    p, pick = use commit

    r, reword = use commit, but edit the commit message

    e, edit = use commit, but stop for amending

    s, squash = use commit, but meld into previous commit

    f, fixup = like "squash", but discard this commit's log message

    x, exec = run command (the rest of the line) using shell

    d, drop = remove commit

    #

    These lines can be re-ordered; they are executed from top to bottom.

    #

    If you remove a line here THAT COMMIT WILL BE LOST.

    #

    However, if you remove everything, the rebase will be aborted.

    #

    Note that empty commits are commented out

  4. Mais si vous voyez noop alors vous tapez probablement mal, par exemple si vous faites git rebase -i 881129d771219cfa29e6f6c2205851a2994a88 qui manque ^ à la fin, vous devriez quitter l'éditeur sans sauvegarder et trouver la raison :

    noop

    Rebase 8db7e8b..fa20af3 onto 8db7e8b

    ...

  5. Si non noop le problème, il suffit de changer le mot pick a reword l'autre reste simplement (vous n'éditez pas le message commit à ce stade), par ex :

    reword <commit hash> <your current commit message>

    Rebase 8db7e8b..fa20af3 onto 8db7e8b

    #

    Commands:

    p, pick = use commit

    ...

  6. Save&quit verra l page d'édition comme pour la méthode n°1 :

    <your existing commit mesage foo bar>

    Please enter the commit message fir your changes. Lines starting

    with # will be ignored, and an empty message aborts the commit.

    #

    Date: Sat Aug 24 17:56:16 2019 +0800

    #

    interactive rebase in progress; onto b057371

    Last command done (1 command done):

    reword d996ffb <existing commit message foo bar>

    No commands remaining.

    You are currently editing a commit while rebasing branch 'master' on 'b057371'.

    #

    changes to be committed:

    modified: foo.py

    #

  7. Modifiez le message en haut, comme la méthode #1 et sauvegardez&quittez, par ex :

    <your new correction commit message>

    Please enter the commit message for your changes. Lines starting

    ....

  8. Encore une fois, comme pour la méthode #1, faites git push -u origin master --force o <how you push normally> --force . La clé ici est --force .

Pour plus d'informations, veuillez lire le doc .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X