Modifier un message de validation dans SourceTree Windows (déjà poussé vers la télécommande)

203

Comment modifier un message de validation 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 référentiel privé et je suis le seul collaborateur.
  • Cela ne me dérange pas de perdre l'un des commits précédents, car je peux les réengager à tout moment.
  • Je ne veux cependant pas perdre de modification de code jamais faite.

Résultat:

  • Comme cela semble impossible pour le moment selon vos commentaires et réponses, je vais créer un nouveau référentiel et tout recommencer. Merci à tous pour votre aide!
Communauté
la source

Réponses:

427

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

Étape 1

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

Sélection de commit avant celui que je souhaite éditer.

Étape 2

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

Sélectionner "Rebase des enfants de manière interactive".

Étape 3

Sélectionnez le commit que vous souhaitez modifier, puis cliquez Edit Messageen bas. Dans ce cas, je sélectionne le commit avec le message "FOOBAR!":

Sélectionnez le commit que vous souhaitez modifier.

Étape 4

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

Modifier le message de validation

Étape 5

Lorsque vous revenez à la fenêtre de rebase interactive, cliquez sur OKpour terminer le rebase:

Cliquez OK pour terminer.

Étape 6

À ce stade, vous devrez forcer vos nouvelles modifications car vous avez rebasé les validations que vous avez déjà poussées. Cependant, la version 1.5.2.0 actuelle de SourceTree pour Windows ne vous permet pas de forcer la transmission via l'interface graphique, vous devrez donc utiliser Git à partir de la ligne de commande de toute façon pour ce faire.

Cliquez sur Terminaldans l'interface graphique pour ouvrir un terminal.

Cliquez sur Terminal

Étape 7

Depuis le terminal force-push avec la commande suivante,

git push origin <branch> -f

<branch>est le nom de la branche que vous souhaitez pousser et -fsignifie forcer la poussée. La poussée forcée écrasera vos validations sur votre dépôt à distance, mais c'est OK dans votre cas puisque vous avez dit que vous ne partagiez pas votre dépôt avec d'autres personnes.

C'est tout! Vous avez terminé!


la source
4
Les étapes sont également les mêmes sur la version Mac.
race_carr
3
Attention: si vous voulez commencer votre message de validation avec # cela ne fonctionnera pas, git le traite comme un commentaire et vous dit que votre message de validation est vide!
Daniel Edholm Ignat
1
"C'est ça! Vous avez terminé!" - C'est si facile que je ne sais pas quoi, comme attraper un lapin peut être. Au lieu de créer une fonctionnalité de programme, pour une situation aussi importante et souvent visible. Lorsque vous venez de faire une faute de frappe à la hâte, vous devez réinitialiser la tête et recréer un nouveau commit.
Rantiev
67
Drôle - je me demande pourquoi ils ne font pas une simple option "Modifier le message de validation".
Jonathan Aquino
1
Force Push est désormais disponible via l'interface graphique. Sinon PARFAIT :-)
LaTisha
43

Sur la version 1.9.6.1. Pour un commit non poussé.

  1. Cliquez sur la description précédemment validée
  2. Cliquez sur l'icône Valider
  3. Saisissez un nouveau message de validation et choisissez « Ammend latest commit » dans la liste déroulante Options de validation.
  4. Validez votre message.
Franc
la source
13

Si le message de commentaire comprend des caractères non anglais , à l'aide de la méthode fournie par user456814, 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 la validation a été retirée par d'autres membres, les modifications ci-dessous peuvent provoquer un chaos pour eux.

Étape 1 : Dans la fenêtre principale de sourcetree, recherchez votre onglet repo et cliquez sur le bouton " terminal " pour ouvrir la console de commande git.

Étape 2 :

[Situation A] : la validation de cible est la dernière.

1) Dans la console de commande git, saisissez

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

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

git push --force

[Situation B] : la validation de cible n'est pas la dernière.

1) Dans la console de commande git, saisissez

git rebase -i HEAD~n

Il s'agit d'écraser les derniers n commits. par exemple, si vous souhaitez modifier le message avant le dernier, n est 2. Cette commande ouvrira une fenêtre vi, le premier mot de chaque ligne est " pick ", et vous changez le "pick" en " reword " pour la ligne que vous souhaitez modifier. Ensuite, saisissez :wqpour enregistrer et quitter cette fenêtre vi. Maintenant, une nouvelle fenêtre vi sera ouverte, dans cette fenêtre vous entrez votre nouveau message. Utilisez également :wqpour enregistrer et quitter.

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

git push --force


Enfin : dans la fenêtre principale de sourcetree, appuyez sur F5pour actualiser.

Hosi Golden
la source
12

Mettre à jour

Remarque: cette réponse a été écrite à l'origine en ce qui concerne les anciennes versions de SourceTree pour Windows et est désormais obsolète.

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 de ligne de commande et je ne sais pas comment en utiliser un :( Est-ce le seul moyen de faire le tri? L'interface graphique ne couvre pas toutes les fonctions de git? - Affiche originale

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

SourceTree peut déjà être fourni avec le shell bash msysgit, ou il peut être en mesure d'utiliser le shell de commande Windows standard. Dans les deux cas, vous l'ouvrez depuis SourceTree en cliquant sur le bouton Terminal:

entrez la description de l'image ici

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

entrez la description de l'image ici

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

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

  1. Effectuez une réinitialisation matérielle dans SourceTree pour le mauvais commit en cliquant dessus avec le bouton droit et en sélectionnant Reset current branch to this commit, puis en sélectionnant l'option de réinitialisation matérielle dans le menu déroulant.entrez la description de l'image ici
  2. Cliquez sur le bouton Valider, puis
  3. Cliquez sur la case à cocher en bas qui dit "Modifier le dernier commit". entrez la description de l'image ici
  4. Apportez les modifications souhaitées au message, puis cliquez à nouveau sur Valider. Voila!

Concernant ce commentaire :

si ce n'est pas possible car il est déjà poussé vers Bitbucket, cela ne me dérangerait pas de créer un nouveau référentiel et de recommencer.

Est-ce à dire que vous êtes la seule personne à travailler sur le repo? Ceci est important car il n'est pas anodin de modifier l'historique d'un dépôt (comme en modifiant un commit) sans causer de problèmes à vos collaborateurs. Cependant, en supposant que vous êtes la seule personne à travailler sur le référentiel, la prochaine chose que vous voudriez faire est de forcer le transfert de votre historique modifié vers la télécommande.

Cependant, sachez que, parce que vous avez effectué une réinitialisation matérielle du commit défectueux, une poussée forcée vous fait perdre tout le travail qui l'a suivi précédemment. Si cela vous convient, vous devrez peut-être utiliser la commande suivante sur la ligne de commande pour effectuer la poussée forcée, 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 permettra de forcer la poussée vers un dépôt.

Cependant, vous devriez vraiment apprendre à utiliser Git à partir de la ligne de commande, cela vous rendra plus compétent dans Git. #ProTip, utilisez msysgit et activez le mode Édition rapide dans les propriétés du terminal, de sorte que vous pouvez double-cliquer pour mettre en surbrillance une ligne de texte, cliquer avec le bouton droit pour copier et cliquer à nouveau avec le bouton droit pour coller. C'est assez rapide.

Communauté
la source