Je veux modifier un message de commit plus profondément dans l'histoire et j'ai poussé de nombreux nouveaux commits.
Comment modifier le message de validation? C'est possible?
la source
Je veux modifier un message de commit plus profondément dans l'histoire et j'ai poussé de nombreux nouveaux commits.
Comment modifier le message de validation? C'est possible?
Le message de Linus Torvalds peut répondre à votre question:
Modifier / éditer les anciens messages de validation
Réponse courte: vous ne pouvez pas (si vous êtes poussé).
extrait (Linus désigne BitKeeper comme BK):
Note latérale, juste par intérêt historique: en BK, vous pourriez.
Et si vous y êtes habitué (comme moi), c'était vraiment très pratique. J'appliquais une bombe patch d'Andrew, je remarquais que quelque chose n'allait pas et je la modifais simplement avant de la sortir.
J'aurais pu faire la même chose avec git. Il aurait été assez facile de faire en sorte que le message de validation ne fasse pas partie du nom, tout en garantissant que l'historique n'a pas été touché, et en autorisant la chose "réparer les commentaires plus tard".
Mais je ne l'ai pas fait.
Une partie de celui-ci est purement "cohérence interne". Git est simplement un système plus propre grâce au fait que tout est protégé par SHA1 et que tous les objets sont traités de la même manière, quel que soit le type d'objet. Oui, il y a quatre différents types d'objets, et ils sont tous très différents, et ils ne peuvent pas être utilisés de la même manière, mais en même temps, même si leur codage peut être différent sur le disque, sur le plan conceptuel ils fonctionnent tous exactement le même.
Mais la cohérence interne n'est pas vraiment une excuse pour être inflexible, et il serait clairement très flexible si nous pouvions simplement réparer les erreurs après qu'elles se produisent. Ce n'est donc pas un argument très fort.
La vraie raison pour laquelle git ne vous permet pas de modifier le message de validation finit par être très simple: de cette façon, vous pouvez faire confiance aux messages. Si vous autorisez les gens à les changer par la suite, les messages ne sont pas très fiables par nature.
Pour être complet, vous pouvez réécrire votre historique de commit local afin de refléter ce que vous voulez, comme suggéré par sykora (avec un rebase et une réinitialisation - hard, gasp!)
Cependant, une fois que vous publiez votre histoire révisée à nouveau (avec git push origin +master:master
, le +
signe forçant la poussée à se produire, même si elle ne donne pas lieu à une validation « avance rapide ») ... vous pourriez obtenir des ennuis .
Extrait de cette autre question SO:
En fait, une fois, j'ai poussé avec --force vers le référentiel git.git et j'ai été grondé par Linus BIG TIME. Cela créera beaucoup de problèmes pour les autres. Une réponse simple est "ne le faites pas".
Actuellement, un remplacement git pourrait faire l'affaire.
En détail: créer une branche de travail temporaire
Réinitialiser le commit à remplacer
Modifier le commit avec le bon message
Remplacez l'ancien commit par le nouveau
retourne à la succursale où tu étais
supprimer la branche temporaire
pousser
terminé.
la source
Vous pouvez utiliser
git rebase -i
(par rapport à la branche à partir de laquelle vous avez créé une branche) «i» pour interactif.Remplacez le
pick
suivant du commentaire de validation que vous souhaitez modifier parr
(oureword
), enregistrez et quittez et, ce faisant, vous pourrez effectuer la modification.git push
encore une fois et vous avez terminé!la source
-p
argumentrebase
dont lesp
réserves fusionnent.Supposons que vous ayez un arbre comme celui-ci:
Tout d'abord,
checkout
une branche temporaire:Sur la
temp
branche,reset --hard
à un commit dont vous voulez changer son message (par exemple, ce commit est946992
):Utilisez
amend
pour changer le message:Après cela, l'arbre ressemblera à ceci:
Ensuite,
cherry-pick
tout le commettras qui est en avance sur946992
demaster
latemp
et les commettras, utilisezamend
si vous voulez changer leurs messages ainsi:L'arbre ressemble maintenant à ceci:
Maintenant, forcez le transfert de la branche temp vers la télécommande:
La dernière étape, supprimer la branche
master
en local,git fetch origin
extraire la branchemaster
du serveur, puis passer à la branchemaster
et supprimer la branchetemp
.Désormais, tous les messages seront mis à jour sur votre site local et distant.
la source
Dans notre boutique, j'ai introduit la convention d'ajouter des balises annotées nommées de manière reconnaissable aux commits avec des messages incorrects, et d'utiliser l'annotation comme remplacement.
Même si cela n'aide pas les gens qui exécutent des commandes "git log" occasionnelles, cela nous fournit un moyen de corriger les références de bug tracker incorrectes dans les commentaires, et tous mes outils de construction et de publication comprennent la convention.
Ce n'est évidemment pas une réponse générique, mais c'est peut-être quelque chose que les gens peuvent adopter au sein de communautés spécifiques. Je suis sûr que si cela est utilisé à plus grande échelle, une sorte de support en porcelaine pourrait apparaître, éventuellement ...
la source
(Depuis http://git.or.cz/gitwiki/GitTips#head-9f87cd21bcdf081a61c29985604ff4be35a5e6c0 )
Je pense que cela devrait répondre à votre question. Cependant, notez que si vous avez poussé du code vers un référentiel distant et que des personnes l'ont extrait, cela va gâcher leur historique de code, ainsi que le travail qu'ils ont effectué. Alors faites-le soigneusement.
la source
Si vous utilisez des extensions Git: allez dans l'écran de validation, il devrait y avoir une case à cocher qui dit "Modifier la validation" en bas, comme on peut le voir ci-dessous:
la source