Question Comment modifier les validations existantes et non supprimées?


J'ai écrit la mauvaise chose dans un message de validation. Alternativement, j'ai oublié d'inclure certains fichiers.

Comment puis-je changer le message / les fichiers de commit? Le commit n'a pas encore été poussé.


7680
2017-10-07 15:44


origine


Réponses:


Modification du message de validation le plus récent

git commit --amend

ouvrira votre éditeur, vous permettant de modifier le message de validation du commit le plus récent. En outre, vous pouvez définir le message de validation directement dans la ligne de commande avec:

git commit --amend -m "New commit message"

... cependant, cela peut rendre les messages de validation multilignes ou les petites corrections plus difficiles à saisir.

Assurez-vous que vous n'avez aucun changement de copie de travail mise en scène avant de le faire ou ils vont s'engager aussi. (Unstaged les modifications ne seront pas validées.)

Changer le message d'un commit que vous avez déjà envoyé à votre branche distante

Si vous avez déjà envoyé votre commit à votre branche distante, alors vous aurez besoin de forcer pousser le commit avec:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

Attention: le push forcé va écraser la branche distante avec l'état de votre locale. S'il y a des validations sur la branche distante que vous n'avez pas dans votre branche locale, vous volonté perdre ces commits.

Attention: faites attention à ne pas modifier les validations que vous avez déjà partagées avec d'autres personnes. La modification commet essentiellement réécrit d'avoir différents SHA IDs, ce qui pose un problème si d'autres personnes ont des copies de l'ancien commit que vous avez réécrit. Tous ceux qui ont une copie de l'ancien commit devront synchroniser leur travail avec votre commit nouvellement réécrit, ce qui peut parfois être difficile, alors assurez-vous de coordonner avec d'autres pour réécrire l'historique de commit partagé, ou évitez simplement de réécrire les commit partagés tout à fait.


Utiliser la rebase interactive

Une autre option consiste à utiliser la rebase interactive.
Cela vous permet de modifier n'importe quel message que vous souhaitez mettre à jour même s'il ne s'agit pas du 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 écrasez vos commits - choisissez le e/r pour éditer le message

enter image description here

Note importante sur le rebasage interactif

Lorsque vous utilisez le git rebase -i HEAD~X il peut y avoir plus que X commet Git va "collecter" tous les commits dans le dernier X commet et s'il y a eu une fusion quelque part entre cette plage, vous verrez tous les commits ainsi le résultat sera X +.

Bon conseil:

Si vous devez le faire pour plus d'une seule branche et que vous risquez de rencontrer des conflits lors de la modification du contenu, configurez-le git rerere et laissez git résoudre ces conflits automatiquement pour vous.


Documentation


14790
2018-02-08 04:26



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

2414
2017-10-07 19:52



Si le commit que vous voulez corriger n'est pas le plus récent:

  1. git rebase --interactive $parent_of_flawed_commit

    Si vous voulez corriger plusieurs commits défectueux, passez le parent du plus ancien d'entre eux.

  2. Un éditeur viendra, avec une liste de tous les commits depuis celui que vous avez donné.

    1. Changement pick à reword (ou sur les anciennes versions de Git, à edit) devant tous les commits que vous voulez réparer.
    2. Une fois que vous enregistrez, Git relit les commits listés.
       

  3. Pour chaque commit que vous voulez reformuler, Git vous ramènera dans votre éditeur. Pour chaque commit que vous voulez modifier, Git vous laisse tomber dans la coquille. Si vous êtes dans la coquille:

    1. Changez le commit de la manière que vous voulez.
    2. git commit --amend
    3. git rebase --continue

La plupart de cette séquence vous sera expliquée par la sortie des différentes commandes au fur et à mesure. C'est très facile, vous n'avez pas besoin de le mémoriser - rappelez-vous juste que git rebase --interactive vous permet de corriger les commits, peu importe depuis longtemps.


Notez que vous ne voulez pas modifier les validations que vous avez déjà effectuées. Ou peut-être que vous le faites, mais dans ce cas, vous devrez prendre grand soin de communiquer avec tous ceux qui pourraient avoir tiré vos commits et fait le travail sur eux. Comment est-ce que je récupère / resynchronise après que quelqu'un a poussé une rebase ou une réinitialisation à une branche publiée?


2294
2017-08-15 21:20



Pour modifier la validation précédente, apportez les modifications souhaitées et mettez en scène ces modifications, puis exécutez

git commit --amend

Cela ouvrira un fichier dans votre éditeur de texte représentant votre nouveau message de validation. Il commence peuplé avec le texte de votre ancien message de validation. Modifiez le message de validation comme vous le souhaitez, puis enregistrez le fichier et quittez votre éditeur pour terminer.

Pour modifier la validation précédente et conserver le même message de journal, exécutez

git commit --amend -C HEAD

Pour corriger le commit précédent en le supprimant entièrement, exécutez

git reset --hard HEAD^

Si vous souhaitez modifier plusieurs messages de validation, exécutez

git rebase -i HEAD~commit_count

(Remplacer commit_count avec le nombre de validations que vous souhaitez modifier.) Cette commande lance votre éditeur. Marquez le premier commit (celui que vous voulez changer) comme "edit" au lieu de "pick", puis enregistrez et quittez votre éditeur. Effectuez la modification que vous souhaitez valider, puis exécutez

git commit --amend
git rebase --continue

Note: Vous pouvez aussi "Faire le changement que vous voulez" depuis l'éditeur ouvert par git commit --amend


749
2018-06-06 21:16



Comme déjà mentionné, git commit --amend est le moyen d'écraser le dernier commit. Une note: si vous souhaitez également écraser les fichiers, la commande serait

git commit -a --amend -m "My new commit message"

381
2017-09-01 20:35



Vous pouvez également utiliser git filter-branch pour ça.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

Ce n'est pas aussi facile qu'un trivial git commit --amend, mais c'est particulièrement utile, si vous avez déjà des fusions après votre message de commit erroné.

Notez que cela va essayer de réécrire chaque commit entre HEAD et le commit imparfait, alors vous devriez choisir votre msg-filter commande très sage ;-)


346
2018-01-10 14:23



Je préfère de cette façon.

git commit --amend -c <commit ID>

Sinon, il y aura un nouveau commit avec un nouvel ID de validation


306
2017-11-08 03:51