Changement de git commit message après coup (vu l'absence d'un tiré à partir de la télécommande)
J'ai fait un git commit et suivantes pousser. Je voudrais changer le message de commit. Si je comprends bien, ce n'est pas conseillé parce que quelqu'un pourrait avoir tiré sur le dépôt distant avant de me faire de tels changements. Que faire si je sais que personne n'a tiré?
Est-il un moyen de faire cela?
- Qu'avez-vous essayé? En supposant que vous savez comment changer le message de commit déjà, et puis essayer de pousser, Git vous dira ce que vous devez faire pour y arriver.
- Voir la réponse à la question "Comment puis-je modifier un mauvais message de commit dans git (j'ai poussé)?" stackoverflow.com/a/457396/444639
- Déclarant - Google Question de git commit Rang de n ° 1 !
- help.github.com/articles/changing-a-commit-message
- Si vous modifiez la TÊTE commit et push généralement (sans --force), puis de façon surprenante, il n'échoue pas. TÊTE de message de validation est mis à jour avec le changement de commettre Id. Cela signifie que les autres commettent des Id à l'exception de la TÊTE reste intacte. J'ai remarqué ce problème avec git version 2.8.1.
- Simple et facile pour tous s'engage, non seulement la plus récente: stackoverflow.com/a/5032614/7705712
Vous devez vous connecter pour publier un commentaire.
Changer l'histoire
Si c'est la plus récente engager, vous pouvez simplement faire ceci:
Cela amène l'éditeur, avec le dernier message de commit et vous permet de modifier le message. (Vous pouvez utiliser
-m
si vous voulez effacer les anciens messages et utiliser un nouveau.)Pression
Et puis quand vous appuyez, faites ceci:
Ou vous pouvez utiliser le bouton "+":
Ou vous pouvez utiliser
--force
:Être prudent lors de l'utilisation de ces commandes.
Si quelqu'un d'autre a poussé les changements à la même direction générale, vous voulez probablement pour éviter la destruction de ces changements. Le
--force-with-lease
option est la plus sûre, car il s'arrêtera s'il y a des changements en amont (Si vous ne spécifiez pas la branche explicitement, Git utilisera la valeur par défaut push. Si votre défaut de pousser le réglage est "matching", alors vous pouvez détruire des changements sur plusieurs branches en même temps.
Tirant /récupération après
Quelqu'un qui a déjà tiré obtiendrez alors un message d'erreur, et ils auront besoin d'une mise à jour (en supposant qu'ils ne sont pas tous les changements eux-mêmes), en faisant quelque chose comme ceci:
Être prudent lors de l'utilisation de
reset --hard
. Si vous avez des modifications à la direction générale, ces modifications seront détruits.Une remarque sur la modification de l'histoire
Les données détruites est vraiment juste l'ancien message de commit, mais
--force
ne le sais pas, et sera heureux de supprimer d'autres données. Alors, pensez à--force
comme "je veux détruire les données, et je sais pour sûr que les données sont détruites." Mais lors de la destruction de données commis, vous pouvez souvent de récupérer les vieux s'engage à partir de la reflog—les données sont en fait orphelins au lieu d'détruit (bien que les orphelins commits sont régulièrement supprimés).Si vous ne pensez pas que vous êtes de détruire les données, puis de rester loin de
--force
... les mauvaises choses qui pourrait arriver.C'est pourquoi
--force-with-lease
est un peu plus sûr.-m
ici ne permet pas de modifier l'ancien message, il ne vous permet de spécifier le nouveau message.git push --force
sans <référentiel> et <branch> options fonctionne aussi, si vous avez votre en amont de définir.git push --force origin +master
(ou quel que soit votre nom de la branche est) ou vous risquez de supprimer des données sur d'autres branches que vous pourriez avoir, mais ne sont pas dans la synchrogit push --force <repository> <branch>
pousse à toutes les branches? C'est tout simplement faux. Il ne pousse à la branche que vous spécifiez.git push --force-with-lease
comme les dépôts et les branches que j'utilise actuellement sont les valeurs par défaut. Devrait fonctionner avec la plupart des gens dans cette situation.--force
, idéalement, vous comprenez ce que les données sont écrasées / détruit lorsque vous l'utilisez. A force de pousser aussi a certaines conséquences si (contrairement à l'OP) quelqu'un a déjà tiré.<repository>
? Est-ilorigin
?org/repo
? Ou tout simplementrepo
?origin
.git log
ne montre pas l'ancien commit (avec message incorrect), juste la façon dont je l'avais prévu! J'avais utiliségit commit --amend
suivie pargit push --force-with-lease origin my-branch
Il suffit de dire :
et puis
git push origin <BRANCH-NAME>
n'a pas fonctionné, j'ai eu à utilisergit push --force
comme expliqué dans la accepté de répondre.git push --force
, ou encore le push ne fonctionne pas.remote
nom, bien (y)!!QUESTION
dit - le commit est déjàPUSHED
. Modifier travaille pour les nations unies-poussé s'engage.remote: To prevent you from losing history, non-fast-forward updates were rejected.
remote: Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note
remote: about fast-forwards' section of 'git push --help' for details.
` [remote rejeté] maître -> master (pré-recevoir crochet diminué)`Risquez d'ê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 la dernièren
s'engage touchés.git affichera un éditeur pour gérer les livraisons, les avis de cette commande:
# r, reword = use commit, but edit the commit message
, c'est exactement ce dont nous avons besoin.Etape 2: changement
pick
àr
pour ceux qui s'engage à ce que vous souhaitez mettre à jour le msg.Enregistrez et fermez l'éditeur.
Etape 3: dans la suite de commit des fichiers, mise à jour de la validation msg que vous le souhaitez
Etape 4: après tout, s'engage msgs sont mis à jour. vous voulez peut-être faire
git push -f
à la mise à jour de la télécommande.git rebase -i HEAD~3
git rebase --continue
. Et si vous voulez changer l'éditeur de texte utilisé pour la session interactive (par exemple à partir de la valeur par défautvi
ànano
), exécutezGIT_EDITOR=nano git rebase -i HEAD~n
.L'utilisation de ces deux étapes dans la console :
et puis
Fait 🙂
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 payer attention à l'endroit où votre repo git est configuré pour le pousser à. Heureusement, il existe une façon de protéger le processus légèrement, en spécifiant une seule branche de mise à jour. Lire à partir de la git homme pages:Si vous souhaitez modifier une ancienne commettre, pas la dernière, vous aurez besoin d'utiliser
rebase
commande comme expliqué ici,Github page d'aide , sur la Modifiant le message des anciens ou plusieurs messages de commit sectionCommande 1.
Puis,
Commande 2.
puis modifier, puis modifier le message dans la fenêtre actuelle. Après cela ne
Une autre option est de créer une autre "errata commettre" (et push) qui fait référence à la commettre l'objet qui contient l'erreur-le nouvel errata commettre fournit également la correction. Un feuillet d'errata commit est un commit avec pas de fond les changements de code, mais un important message de commit -- par exemple, ajouter un caractère d'espace pour votre fichier readme et s'engager à ce que le changement avec l'important message de commit, ou utiliser la commande git option
--allow-empty
. Il est certainement plus facile et plus sûr que la relocalisation, il ne modifie pas la vrai histoire, et il conserve la branche de l'arbre nettoyer (à l'aide deamend
est également un bon choix si vous êtes à la correction la plus récente livraison, mais un errata de validation peut être un bon choix pour les plus âgés s'engage). Ce genre de chose arrive rarement que documenter simplement l'erreur est assez bon. Dans l'avenir, si vous avez besoin de recherche dans un git log pour une fonction de mots clés, l'original (erronée) s'engager à ne peut pas apparaître en raison de la mauvaise mot-clé a été utilisé dans l'original s'engager (à l'origine de la faute de frappe) -- toutefois, le mot-clé apparaît dans l'errata de commettre, qui sera alors de vous diriger à l'origine de commettre, qui avait la typo. Voici un exemple:git commit -m “fixed feature A”
(Supposons git cela donne un commit ID de e3ab7312... ... (plus tard, vous vous rendez compte de votre message incorrect donc maintenant faire un pas sans conséquence modification à un fichier comme l'ajout d'un espace pour le fichier readme, ou utiliser le—allow-empty
git option) ...git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’
‘’Cela fonctionne pour moi, assez fine,
git checkout origine/branchname
si vous êtes déjà dans la branche puis c'est mieux de le faire tirer ou de rebase
ou
Plus tard, vous pouvez simplement utiliser
ou si vous le souhaitez pour ouvrir l'éditeur de texte, puis utiliser
Je préfère utiliser l'éditeur de texte si vous avez de nombreux commentaires. Vous pouvez configurer votre préféré éditeur de texte avec la commande
De toute façon, lorsque vous avez terminé de changer le message de commit, le sauvegarder et quitter
puis exécutez
Et vous avez terminé
de l'information supplémentaire pour le même problème si vous utilisez bitbucket pipeline
éditer votre message
pousser à le rompre
puis ajouter l'option --force pour pousser votre commande sur le pipeline
Cela permettra de supprimer votre précédente livraison(s) et pousser votre.
je l'ai essayé sur bitbucket pipeline et sa fonctionne bien