262 votes

Editer un message de commit dans SourceTree Windows (déjà poussé à distance)

Comment modifier un message de livraison incorrect dans SourceTree sans toucher à la ligne de commande ?

Détails supplémentaires :

  • Ce n'est pas le dernier commit.
  • Tout a déjà été poussé vers Bitbucket.
  • Il s'agit d'un dépôt privé et je suis le seul collaborateur.
  • Cela ne me dérange pas de perdre les engagements précédents, car je peux les réengager à tout moment.
  • Je ne veux cependant pas perdre toute modification de code jamais effectuée.

Résultat :

  • Comme cela semble impossible pour le moment d'après vos commentaires et réponses, je vais créer un nouveau dépôt et tout recommencer. Merci à tous pour votre aide !

536voto

Cupcake Points 22154

Voici les étapes pour modifier le message de commit d'un commit précédent ( qui n'est n'est pas le commit le plus récent ) en utilisant SourceTree pour Windows version 1.5.2.0 :

Étape 1

Sélectionnez l'engagement immédiatement avant l'engagement que vous voulez modifier. Par exemple, si je veux éditer le commit avec le message "FOOBAR !" alors je dois sélectionner le commit qui vient juste avant :

Selecting commit before the one that I want to edit.

Étape 2

Cliquez avec le bouton droit de la souris sur le commit sélectionné et cliquez sur Rebase children...interactively :

Selecting "Rebase children interactively".

Étape 3

Sélectionnez l'engagement que vous voulez modifier, puis cliquez sur Edit Message au bas. Dans ce cas, je sélectionne le commit avec le message "FOOBAR !":

Select the commit that you want to edit.

Étape 4

Modifiez le message de livraison, puis cliquez sur OK . Dans mon exemple, j'ai ajouté "SHAZBOT ! SKADOOSH !"

Edit the commit message

Étape 5

Lorsque vous revenez à la fenêtre interactive de rebasement, cliquez sur OK pour terminer le rebasement :

Click OK to finish.

Étape 6

A ce stade, vous devrez forcer vos nouveaux changements puisque vous avez rebasé les commits que vous avez déjà poussés. Cependant, la version actuelle 1.5.2.0 de SourceTree pour Windows ne vous permet pas de forcer les changements par le biais de l'interface graphique. vous devrez donc utiliser Git en ligne de commande pour le faire.

Cliquez sur Terminal à partir de l'interface graphique pour ouvrir un terminal.

Click Terminal

Étape 7

A partir du terminal force-push avec la commande suivante,

git push origin <branch> -f

donde <branch> est le nom de la branche que vous voulez pousser, et -f signifie de forcer la poussée. La force pousse écrasera vos commits sur votre sur votre repo distant, mais c'est OK dans votre cas puisque vous avez dit que vous ne partagez pas votre repo avec d'autres personnes.

Voilà, c'est fait ! Vous avez terminé !

70voto

Franc Points 418

Sur la version 1.9.6.1. Pour le commit UnPushed.

  1. Cliquez sur la description précédemment engagée
  2. Cliquez sur l'icône Commit
  3. Saisissez un nouveau message d'engagement, et sélectionnez " Modifier le dernier commit "dans la liste déroulante des options d'engagement.
  4. Engagez votre message.

22voto

Hosi Golden Points 311

Si le message de commentaire comprend non-anglais en utilisant la méthode fournie par l'utilisateur 456814, ces caractères seront remplacés par des points d'interrogation. (testé sous sourcetree Ver2.5.5.0)

Je dois donc utiliser la méthode suivante.

ATTENTION si le commit a été retiré par d'autres membres, les changements ci-dessous peuvent provoquer le chaos pour eux.

Étape 1 : Dans la fenêtre principale de sourcetree, localisez l'onglet de votre repo, et cliquez sur l'icône " terminal "pour ouvrir la console de commande git.

Étape 2 :

[Situation A] : le commit cible est le plus récent.

1) Dans la console de commande git, entrez

git commit --amend -m "new comment message"

2) Si le commit cible a été poussé à distance, vous devez pousser à nouveau en force. Dans la console de commande git, entrez

git push --force

[Situation B] : le commit cible n'est pas le plus récent.

1) Dans la console de commande git, entrez

git rebase -i HEAD~n

C'est pour écraser les dernières n commits. Par exemple, si vous voulez modifier le message avant le dernier, n est de 2. Cette commande ouvre une fenêtre vi, le premier mot de chaque ligne est " choisir ", et vous changez le "pick" en " reformuler "pour la ligne que vous voulez éditer. Ensuite, saisissez :wq pour enregistrer et quitter cette fenêtre vi. Une nouvelle fenêtre vi s'ouvre alors, dans laquelle vous saisissez votre nouveau message. Utilisez également :wq pour sauvegarder&quitter.

2) Si le commit cible a été poussé à distance, vous devez pousser à nouveau en force. Dans la console de commande git, entrez

git push --force

Enfin : Dans la fenêtre principale du sourcetree, appuyez sur F5 à rafraîchir.

13voto

Cupcake Points 22154

Mise à jour

Remarque : cette réponse a été rédigée à l'origine pour des versions plus anciennes de SourceTree pour Windows, et n'est plus d'actualité.

Voir ma nouvelle réponse pour la version actuelle de SourceTree pour Windows, 1.5.2.0 . Je laisse cette réponse derrière moi à des fins historiques.

Réponse originale

Comme je suis sous Windows, je n'ai pas d'outil en ligne de commande et je ne sais pas comment en utiliser un :( Est-ce le seul moyen de régler ce problème ? L'interface graphique ne couvre pas toutes les fonctions de git ? - Affiche originale

En ce qui concerne les interfaces graphiques de Git, non, ils ne couvrent pas toutes les fonctions de Git . Ils ne s'approchent même pas . Je vous suggère de consulter l'une des réponses dans Comment puis-je modifier un message de livraison incorrect dans Git ? Git est suffisamment flexible pour qu'il existe de multiples solutions... à partir de la ligne de commande.

Il se peut que SourceTree soit déjà livré avec l'interpréteur de commandes msysgit bash, ou qu'il soit capable d'utiliser l'interpréteur de commandes standard de Windows. Dans tous les cas, vous l'ouvrez à partir de SourceTree en cliquant sur le bouton Terminal :

enter image description here

Vous définissez le terminal que SourceTree utilise (bash ou Windows) ici :

enter image description here

Une façon de résoudre le problème dans SourceTree

Ceci étant dit, voici une façon de le faire dans SourceTree. Puisque vous avez mentionné dans les commentaires si cela ne vous dérange pas de "revenir au commit défectueux" (je suppose que vous voulez dire réinitialiser, ce qui est une opération différente dans Git), alors voici les étapes :

  1. Faites un hard reset dans SourceTree sur le mauvais commit en faisant un clic droit dessus et en sélectionnant Reset current branch to this commit et sélectionnez l'option de réinitialisation matérielle dans la liste déroulante. enter image description here
  2. Cliquez sur le bouton Commit, puis
  3. Cliquez sur la case à cocher en bas qui dit "Modifier le dernier commit". enter image description here
  4. Apportez les modifications que vous souhaitez au message, puis cliquez à nouveau sur Commit. Voilà !

Concernant ce commentaire :

si ce n'est pas possible parce qu'il est déjà poussé vers Bitbucket, cela ne me dérangerait pas de créer un nouveau dépôt et de recommencer.

Cela signifie-t-il que vous êtes la seule personne à travailler sur le dépôt ? Ceci est important car il n'est pas trivial de modifier l'historique d'un repo (par exemple en modifiant un commit) sans causer de problèmes à vos collaborateurs. Cependant, en supposant que vous êtes la seule personne à travailler sur le dépôt, la prochaine chose que vous voudriez faire est de forcer le transfert de l'historique modifié vers le dépôt distant.

Soyez conscient, cependant, que parce que vous avez fait un hard reset sur le commit défectueux, alors le force pushing vous fait perdre tout le travail qui est venu après lui précédemment. Si cela vous convient, vous devrez peut-être utiliser la commande suivante en ligne de commande pour effectuer le forçage, car je n'ai pas trouvé d'option pour le faire dans SourceTree :

git push remote-repo head -f

Cela suppose également que BitBucket vous permette de forcer le push vers un repo.

Vous devriez vraiment apprendre à utiliser Git à partir de la ligne de commande de toute façon, cela vous rendra plus compétent dans Git. #ProTip, utilisez msysgit et activez le mode d'édition rapide dans les propriétés du terminal, de sorte que vous pouvez double-cliquer pour mettre en évidence une ligne de texte, faire un clic droit pour copier, et un autre clic droit pour coller. C'est assez rapide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X