J'ai fait un git commit et un push ultérieur. Je voudrais changer le message de validation. Si je comprends bien, ce n'est pas conseillé car quelqu'un a pu se retirer du référentiel distant avant d'effectuer de telles modifications. Et si je sais que personne n'a tiré?
Y a-t-il un moyen de faire cela?
Réponses:
Changer l'histoire
S'il s'agit du commit le plus récent, vous pouvez simplement le faire:
Cela affiche l'éditeur avec le dernier message de validation et vous permet de modifier le message. (Vous pouvez utiliser
-m
si vous souhaitez effacer l'ancien message et en utiliser un nouveau.)Pousser
Et puis quand vous poussez, faites ceci:
Ou vous pouvez utiliser "+":
Ou vous pouvez utiliser
--force
:Soyez prudent lorsque vous utilisez ces commandes.
Si quelqu'un d'autre a poussé les modifications vers la même branche, vous souhaiterez probablement éviter de détruire ces modifications. L'
--force-with-lease
option est la plus sûre, car elle sera abandonnée en cas de modifications en amont (Si vous ne spécifiez pas la branche explicitement, Git utilisera les paramètres push par défaut. Si votre paramètre de push par défaut est "correspondant", vous pouvez détruire les modifications sur plusieurs branches en même temps.
Tirer / récupérer ensuite
Quiconque a déjà tiré recevra maintenant un message d'erreur, et il devra mettre à jour (en supposant qu'il n'apporte aucune modification lui-même) en faisant quelque chose comme ceci:
Soyez prudent lors de l'utilisation
reset --hard
. Si vous avez modifié la branche, ces modifications seront détruites.Une note sur la modification de l'historique
Les données détruites ne sont en fait que l'ancien message de validation, mais
--force
ne le savent pas, et supprimeront également volontiers d'autres données. Pensez donc--force
à "Je veux détruire les données, et je sais avec certitude quelles données sont détruites." Mais lorsque les données détruites sont validées, vous pouvez souvent récupérer les anciennes validations du reflog - les données sont en fait orphelines au lieu d'être détruites (bien que les validations orphelines soient périodiquement supprimées).Si vous ne pensez pas que vous détruisez des données, restez à l'écart de
--force
... de mauvaises choses pourraient se produire .C'est pourquoi
--force-with-lease
est un peu plus sûr.la source
git push --force
sans les options <repository> et <branch> fonctionne aussi, si vous avez votre configuration en amont.<repository>
? C'est çaorigin
?org/repo
? Ou tout simplementrepo
?Dis le :
et alors
la source
git push origin <BRANCH-NAME>
ne fonctionnait pas, j'ai dû utilisergit push --force
comme expliqué dans la réponse acceptée.git push --force
, sinon la poussée ne passe pas.Pour modifier un commit autre que le plus récent:
Étape 1 :
git rebase -i HEAD~n
pour effectuer un rebase interactif pour les dernières validationsn
affectées. (c.-à-d. si vous voulez changer un message de validation, 3 validations reviennent, faitesgit rebase -i HEAD~3
)git affichera un éditeur pour gérer ces validations, notez cette commande:
c'est exactement ce dont nous avons besoin!
Étape 2 : passez
pick
àr
pour les validations que vous souhaitez mettre à jour le message. Ne vous embêtez pas à changer le message de validation ici, il sera ignoré. Vous le ferez à l'étape suivante. Enregistrez et fermez l'éditeur.Notez que si vous modifiez votre «plan» de rebase mais qu'il ne commence pas le processus de vous permettre de renommer les fichiers, exécutez:
Si vous souhaitez modifier l'éditeur de texte utilisé pour la session interactive (par exemple, du vi par défaut à nano), exécutez:
Étape 3 : Git fera apparaître un autre éditeur pour chaque révision que vous avez mise
r
avant. Mettez à jour le message de validation à votre guise, puis enregistrez et fermez l'éditeur.Étape4 : Une fois tous les commits, les msgs sont mis à jour. vous voudrez peut-être faire
git push -f
pour mettre à jour la télécommande.la source
git rebase -i HEAD~3
git rebase --continue
. Et si vous voulez changer l'éditeur de texte utilisé pour la session interactive (par exemple , la valeur par défautvi
ànano
), exécutezGIT_EDITOR=nano git rebase -i HEAD~n
.Utilisez ces deux étapes dans la console:
et alors
Terminé :)
la source
Il convient de noter que si vous utilisez
push --force
plusieurs références, elles seront TOUTES modifiées en conséquence. Assurez-vous de faire attention à l'endroit où votre dépôt git est configuré pour pousser. Heureusement, il existe un moyen de protéger légèrement le processus, en spécifiant une seule branche à mettre à jour. Lisez les pages de manuel de git:la source
Si vous souhaitez modifier une ancienne COMMIT pas le dernier, vous devrez utiliser la
rebase
commande comme expliqué ici, page d'aide Github , le modifiant le message de plus ou de plusieurs commits sectionla source
Commande 1 .
Alors,
Commande 2 .
la source
puis modifiez et modifiez le message dans la fenêtre actuelle. Après cela,
la source
Une autre option consiste à créer un "commit d'errata" (et push) supplémentaire qui référence l'objet de commit qui contient l'erreur - le nouveau commit d'errata fournit également la correction. Un commit d'errata est un commit sans modification substantielle de code mais un message de commit important - par exemple, ajoutez un caractère espace à votre fichier readme et validez ce changement avec le message de commit important, ou utilisez l'option git
--allow-empty
. C'est certainement plus facile et plus sûr que le rebasage, il ne modifie pas le véritable historique et il maintient l'arborescence des branches propre (en utilisantamend
est également un bon choix si vous corrigez le commit le plus récent, mais un commit d'errata peut être un bon choix pour les commits plus anciens). Ce genre de chose arrive si rarement qu'il suffit de simplement documenter l'erreur. À l'avenir, si vous devez rechercher dans un journal git un mot clé de fonctionnalité, le commit d'origine (erroné) peut ne pas apparaître car le mauvais mot clé a été utilisé dans ce commit d'origine (la faute de frappe d'origine) - cependant, le mot clé apparaîtra dans l'errata commit qui vous dirigera ensuite vers le commit d'origine qui avait la faute de frappe. Voici un exemple:la source
git commit -m “fixed feature A”
(Supposons que git lui attribue un ID de validation e3ab7312 ... ... (plus tard, vous vous rendez compte que votre message était incorrect, alors apportez maintenant une modification sans conséquence à un fichier comme l'ajout d'un espace au fichier Lisezmoi, ou utilisez l'—allow-empty
option git). ..git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’
'' 'git notes
cela servirait le même but qu'un "commit d'errata". Ajoutez simplement une note à un commit précédent pour annoter ou corriger toute erreur dans le message de commit:https://git-scm.com/docs/git-notes
Cela fonctionne très bien pour moi,
git checkout origin / branchname
si vous êtes déjà en succursale, il vaut mieux tirer ou rebaser
ou
Plus tard, vous pouvez simplement utiliser
ou si vous aimez ouvrir l'éditeur de texte, utilisez
Je préférerai 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
Quoi qu'il en soit, lorsque vous avez terminé de modifier le message de validation, enregistrez-le et quittez
puis exécutez
Et tu as fini
la source
des informations supplémentaires pour le même problème si vous utilisez le pipeline bitbucket
éditez votre message
pousser vers le serveur
puis ajoutez --force à votre commande push sur le pipeline
Cela supprimera vos engagements précédents et poussera votre engagement actuel.
je l'ai essayé sur le pipeline bitbucket et son bon fonctionnement
la source