J'ai écrit la mauvaise chose dans un message de validation.
Comment puis-je modifier le message ? Le commit n'a pas encore été poussé.
git commit --amend
ouvrira votre éditeur, vous permettant de changer le message de commit du commit le plus récent. De plus, vous pouvez définir le message de commit directement dans la ligne de commande avec :
git commit --amend -m "New commit message"
...cependant, cela peut rendre les messages de commit de plusieurs lignes ou les petites corrections plus lourdes à saisir.
Assurez-vous que vous n'avez pas de modifications de la copie de travail stagée avant de faire cela ou elles seront livrées aussi. (Les changements Unstaged ne seront pas livrés).
Si vous avez déjà poussé votre commit vers votre branche distante, vous devrez forcer le push du commit avec :
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Attention : le forçage va écraser la branche distante avec l'état de votre branche locale. S'il y a des commits sur la branche distante que vous n'avez pas dans votre branche locale, vous perdrez ces commits.
Attention : soyez prudent lorsque vous modifiez des commits que vous avez déjà partagés avec d'autres personnes. modifier des commits revient à les réécrire pour qu'ils aient des ID [SHA][1] différents, ce qui pose un problème si d'autres personnes ont des copies de l'ancien commit que vous avez réécrit. Toute personne ayant une copie de l'ancien commit devra synchroniser son travail avec votre nouveau commit réécrit, ce qui peut parfois être difficile, alors assurez-vous de vous coordonner avec les autres lorsque vous tentez de réécrire l'historique des commits partagés, ou évitez simplement de réécrire les commits partagés.
Une autre option est d'utiliser interactive rebase. Cela vous permet de modifier n'importe quel message que vous voulez mettre à jour, même si ce n'est pas le dernier message.
Pour faire un squash Git, suivez ces étapes :
// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X
Une fois que vous avez écrasé vos commits - choisissez le e/r
pour éditer le message :
[!Entrez la description de l'image ici] [2]] [2]
Lorsque vous utilisez git rebase -i HEAD~X
il peut y avoir plus que X
commits. Git va "collecter" tous les commits dans les X
derniers commits, et s'il y a eu une fusion quelque part entre cette plage, vous verrez aussi tous les commits, donc le résultat sera X+
Si vous devez le faire pour plus d'une branche et que vous risquez de rencontrer des conflits lors de la modification du contenu, configurez [git rerere
][3] et laissez Git résoudre ces conflits automatiquement pour vous.
[doc] : https://www.kernel.org/pub/software/scm/git/docs/git-commit.html [git-rebase] : https://www.kernel.org/pub/software/scm/git/docs/git-rebase.html
[1] : http://en.wikipedia.org/wiki/SHA-1 [2] : http://i.stack.imgur.com/LVcm9.png [3] : https://stackoverflow.com/questions/35415925/is-it-possible-to-setup-git-merge-for-automatic-resolving-git-rerere/35417944#35417944
Si le commit que vous voulez corriger n'est pas le plus récent :
git rebase --interactive $parent_of_flawed_commit
Si vous voulez corriger plusieurs commits défectueux, passez le parent du plus ancien d'entre eux.
Un éditeur apparaîtra, avec une liste de tous les commits depuis celui que vous avez donné.
pick
en reword
(ou sur les anciennes versions de Git, en edit
) devant les commits que vous voulez corriger.Pour chaque commit que vous voulez reword, Git vous déposera de nouveau dans votre éditeur. Pour chaque commit que vous voulez éditer, Git vous dépose dans le shell. Si vous êtes dans le shell :
git commit --amend
.git rebase --continue
La plupart de cette séquence vous sera expliquée par la sortie des différentes commandes au fur et à mesure que vous avancerez. C'est très facile ; vous n'avez pas besoin de l'apprendre par coeur - rappelez-vous simplement que git rebase --interactive
vous permet de corriger les commits, peu importe combien de temps ils se sont écoulés.
Notez que vous ne voudrez pas modifier des commits que vous avez déjà poussés. Ou peut-être que si, mais dans ce cas vous devrez prendre grand soin de communiquer avec tous ceux qui ont pu tirer vos commits et travailler dessus. [Comment puis-je récupérer/resynchroniser après que quelqu'un ait poussé une rebase ou une réinitialisation vers une branche publiée ?][1]