Ça dit:
Lorsque vous enregistrez et quittez l'éditeur, il vous ramènera à ce dernier commit dans cette liste et vous déposera sur la ligne de commande avec le message suivant:
$ git rebase -i HEAD~3
Stopped at 7482e0d... updated the gemspec to hopefully work better
You can amend the commit now, with
Cela ne signifie pas:
tapez à nouveau git rebase -i HEAD~3
Essayez de ne pas taper git rebase -i HEAD~3
lorsque vous quittez l'éditeur, et cela devrait fonctionner correctement.
(sinon, dans votre situation particulière, un git rebase -i --abort
peut être nécessaire pour tout réinitialiser et vous permettre de réessayer)
Comme Dave Vogt le mentionne dans les commentaires, il git rebase --continue
s'agit de passer à la tâche suivante du processus de rebasage, après avoir modifié le premier commit .
De plus, Gregg Lind mentionne dans sa réponse la reword
commande degit rebase
:
En remplaçant la commande "pick" par la commande "edit", vous pouvez dire git rebase
d'arrêter après avoir appliqué ce commit, afin que vous puissiez éditer les fichiers et / ou le message de commit, modifier le commit et continuer le rebasage.
Si vous voulez juste éditer le message de commit pour un commit, remplacez la commande " pick
" par la commande " reword
" , depuis Git1.6.6 (janvier 2010) .
Il fait la même chose ' edit
' lors d'un rebase interactif, sauf qu'il vous permet uniquement d'éditer le message de validation sans rendre le contrôle au shell . Ceci est extrêmement utile.
Actuellement, si vous souhaitez nettoyer vos messages de validation, vous devez:
$ git rebase -i next
Ensuite, définissez tous les commits sur «modifier». Puis sur chacun:
# Change the message in your editor.
$ git commit --amend
$ git rebase --continue
Utiliser « reword
» au lieu de « edit
» vous permet de sauter les appels git-commit
etgit-rebase
.
git rebase --continue
à la tâche suivante du processus de rebasage, après avoir modifié le premier commit.Comme l'a suggéré Gregg Lind, vous pouvez utiliser des reformulations pour être invité à ne modifier que le message de validation (et laisser le commit intact dans le cas contraire):
Voici
n
la liste des n derniers commits.Par exemple, si vous utilisez
git rebase -i HEAD~4
, vous pouvez voir quelque chose comme ceci:Maintenant, remplacez pick par reword pour les commits dont vous souhaitez modifier les messages:
Quittez l'éditeur après avoir enregistré le fichier, et ensuite vous serez invité à modifier les messages pour les commits que vous avez marqués de reformulation , dans un fichier par message. Notez qu'il aurait été beaucoup plus simple de simplement modifier les messages de validation lorsque vous les avez remplacés
pick
parreword
, mais cela n'a aucun effet.En savoir plus sur la page de GitHub pour modifier un message de validation .
la source
FWIW, git rebase interactive a maintenant une option "reword", ce qui rend cela beaucoup moins pénible!
la source
reword
, pourquoi git ne vous permet-il pas simplement d'éditer les messages de validation dans ce fichier avec la liste des validations? Au lieu de cela, il lancera l'éditeur avec un fichier de message de validation parreword
ligne. C'est tout simplement inutile. Même si d'autres actions quepick
oureword
nécessitent le lancement de commandes externes,reword
cela ne le nécessiterait pas.Je voulais juste fournir une option différente pour cela. Dans mon cas, je travaille généralement sur mes succursales individuelles, puis je fusionne pour devenir maître, et les engagements individuels que je fais à ma section locale ne sont pas si importants.
En raison d'un hook git qui vérifie le numéro de ticket approprié sur Jira mais qui était sensible à la casse, j'ai été empêché de pousser mon code. De plus, le commit a été fait il y a longtemps et je ne voulais pas compter combien de commits pour revenir sur le rebase.
Donc, ce que j'ai fait a été de créer une nouvelle branche à partir du dernier master et d'écraser tous les commits de la branche problématique en un seul commit sur la nouvelle branche. C'était plus facile pour moi et je pense que c'est une bonne idée de l'avoir ici comme référence future.
Du dernier maître:
ensuite
Référence: https://github.com/rotati/wiki/wiki/Git:-Combine-all-messy-commits-into-one-commit-before-merging-to-Master-branch
la source
rebase -i
pendant environ 2 heures et sans succès. Mon commit était derrière 18 commits, donc vous pouvez l'imaginer. C'était le moyen le plus simple et pratique que je pouvais trouver sans avoir besoin d'utiliser le rebase. Merci mon ami!Voici un très joli Gist qui couvre tous les cas possibles: https://gist.github.com/nepsilon/156387acf9e1e72d48fa35c4fabef0b4
Aperçu:
la source