Existe-t-il un moyen de modifier un message de validation après avoir validé et transmis à GitHub? Je vois qu'il y a un 'ajouter une note' ainsi que des commentaires en ligne, mais pas l'édition réelle d'un message de commit. Il y a aussi 'amend commit' dans les extensions git mais cela ne modifie pas le message existant.
130
Réponses:
git rebase -i <commit hash you want to change>^
Ceci ouvrira votre éditeur par défaut (généralement vi ) avec une liste de validations et d’actions pour chacun. Par défaut, l'action est
pick
.Pour tout engagement que vous souhaitez modifier, changez
pick
pourreword
.Sauvegarder et quitter (dans vi:)
:wq
.Pour chaque validation, vous aurez un éditeur pour éditer le message de validation. Changez-le comme bon vous semble, sauvegardez et quittez.
Une fois que vous avez terminé de modifier tous les messages de validation, vous retournez à l'invite de commande et créez une nouvelle arborescence avec les messages mis à jour.
Vous pouvez maintenant les télécharger sur github en utilisant
git push origin --force
.Si vous avez juste besoin de réparer votre dernier commit, vous pouvez remplacer les étapes 1 à 4 par
git commit --amend
.la source
^
là - j’ai en effet suggéré de se baser sur le parent du commit que vous voulez modifier.^^
pour terminer la commande par un littéral,^
par exemple:git rebase -i 2c747b32^^
Dans Intellij Idea, vous pouvez le faire si facilement.
la source
git push origin --force
ensuite comme suggéré dans la réponse de @ Mureinik.Prémisse:
si votre git-graph ressemble à ...
(
df9c192
etb7ec061
sont les hashes commit de target-commit et parent-commit, séparément)Solution:
vous pouvez simplement taper les instructions suivantes ...
Explication:
git reset --soft b7ec061
conservera vos modifications de fichiers et se réinitialisera sur parent-commit (c.-à-d. b7ec061)git commit -m "..."
créera localement un nouveau commitgit push -f
va pousser votre nouveau commit sur le serveur et remplacer l'ancien (par exemple df9c192)la source
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 il garde l’arbre des branches propre (en utilisantamend
est également un bon choix si vous corrigez le dernier commit, mais un commit errata peut être un bon choix pour les plus anciens commits). Ce genre de chose arrive si rarement que le simple fait de documenter l'erreur est suffisant. À l'avenir, si vous devez rechercher un mot-clé dans le journal git, il se peut que le commit original (erroné) n'apparaisse pas car le mot-clé 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:la source
La réponse de @Mureinik est bonne mais incompréhensible pour les débutants.
Première méthode:
git commit --amend
:pick
, ceci est déjà la page d'édition et vous pouvez directement éditer le message en haut et sauvegarder et quitter , par exemple:git push -u origin master --force
ou<how you push normally> --force
. La clé ici est--force
.Deuxième méthode:
Vous pouvez voir le commit par
git log
extrait ou extraire de l'URL du référentiel, par exemple dans mon cas:881129d771219cfa29e6f6c2205851a2994a8835
Ensuite, vous pouvez faire
git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
ougit rebase -i HEAD^
(si le dernier)Tu verrais:
noop
alors vous tapez probablement mal, par exemple si vous faitesgit rebase -i 881129d771219cfa29e6f6c2205851a2994a88
ce qui manque^
à la fin, vous feriez mieux de quitter l'éditeur sans sauvegarder et de trouver la raison:noop
problème, remplacez simplement le motpick
parreword
, il ne reste plus qu'un mot (vous ne modifiez pas le message de validation à ce stade), par exemple:git push -u origin master --force
ou<how you push normally> --force
. La clé ici est--force
.Pour plus d'informations, veuillez lire le doc .
la source