Comment changer les commits existants, non pushés?

J'ai écrit la mauvaise chose dans le message commit. De plus, j'ai oublié d'inclure certains fichiers.

Comment changer le message / les fichiers commit? Le commit n'a pas encore commencé.

7676
07 окт. établi par Laurie Young le 07 octobre 2008-10-07 18:44 '08 à 18:44 2008-10-07 18:44
@ 27 réponses

Changements apportés au dernier message de validation

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

... Cependant, cela peut rendre les messages de validation sur plusieurs lignes ou de petites corrections plus difficiles à saisir.

Avant de faire cela, assurez-vous que la copie de travail n’a pas été modifiée, sinon ils seront corrigés. (Les modifications non effectuées ne seront pas corrigées.)

Modification du message de validation que vous avez déjà envoyé à la branche distante

Si vous avez déjà poussé votre commit vers une branche distante, vous devez forcer le commit avec:

SHA , ce qui crée un problème si d'autres personnes possèdent des copies d'anciens commits que vous avez réécrites.  Quiconque possède une copie d'un ancien commit devra synchroniser son travail avec le commit récemment réécrit, ce qui peut parfois s'avérer difficile. Veillez donc à vous coordonner avec les autres lorsque vous essayez de réécrire l'historique d'un commit commun ou évitez simplement de réécrire les commits totaux en général. 


Utiliser rebaz interactif

Une autre option consiste à utiliser une base interactive.
Cela vous permet de modifier tout message que vous souhaitez mettre à jour, même s'il ne s'agit pas du dernier message.

Pour faire la courge git, procédez comme suit:

 // X is the number of commits to the last commit you want to be able to edit git rebase -i HEAD~X 

Dès que vous écrasez vos commits, sélectionnez e/r pour modifier le message.

2019

07 окт. La réponse est donnée à EfForEffort 07 oct. 2008-10-07 18:50 2008 à 18h50 2008-10-07 18:50
2438
08 февр. La réponse est donnée à lfx_cool le 08 février 2010-02-08 07:26 '10 à 7:26 am 2010-02-08 07:26

Si le correctif que vous souhaitez corriger n'est pas le dernier:

  • git rebase --interactive $parent_of_flawed_commit

    Si vous souhaitez corriger plusieurs commits erronés, transmettez le code parent du plus ancien.

  • Un éditeur apparaît avec une liste de tous les commits depuis que vous l’avez donnée.

    • Changez le pick pour reword (ou les anciennes versions de Git, pour le edit ) avant les corrections que vous souhaitez corriger.
    • Après la sauvegarde, Git rejouera les commits listés.

  • Pour chaque commit que vous voulez refaire, Git vous ramènera à votre éditeur. Pour chaque commit que vous voulez changer, Git vous place dans un shell. Si vous êtes dans un shell:

    • Changer la fixation en aucune façon.
    • git commit --amend
    • git rebase --continue

La majeure partie de cette séquence vous sera expliquée par les résultats des différentes équipes en déplacement. C'est très facile, vous n'avez pas besoin de le mémoriser - rappelez-vous simplement que git rebase --interactive vous permet de réparer, peu importe combien de temps ils étaient.


Notez que vous ne souhaitez pas modifier les engagements sur lesquels vous avez déjà appuyé. Ou peut-être que vous le ferez, mais dans ce cas, vous devrez prendre le plus grand soin de communiquer avec tous ceux qui ont pu retirer vos commits et faire le travail par-dessus. Comment restaurer / resynchroniser après que quelqu'un ait fait glisser une rebase ou réinitialisé vers un thread publié?

2321
07 окт. la réponse est donnée par Aristote Pagaltzis Oct 07 2008-10-07 22:52 08 à 22h52 2008-10-07 22:52

Pour apporter des modifications à une précédente validation, apportez les modifications nécessaires et apportez ces modifications, puis exécutez

 git commit --amend -C HEAD 

Pour corriger le commit précédent, en le supprimant complètement, exécutez

 git rebase -i HEAD~ commit_count 

(Remplacez commit_count par le nombre de commits que vous souhaitez modifier.) Cette commande démarre votre éditeur. Marquez le premier arrêt (celui que vous souhaitez modifier) ​​comme "modifier" au lieu de "sélectionner", puis enregistrez et quittez l'éditeur. Apportez les modifications que vous souhaitez valider, puis exécutez

758
16 авг. La réponse est donnée par Fatih 16 août. 2011-08-16 00:20 '11 à 0:20 2011-08-16 00:20

Comme mentionné précédemment, git commit --amend est un moyen de remplacer le dernier commit. Remarque: si vous souhaitez également écraser des fichiers , la commande sera

390
07 июня '11 в 0:16 2011-06-07 00:16 la réponse est donnée par John le 07 juin '11 à 0:16 2011-06-07 00:16

Vous pouvez également utiliser git filter-branch pour cela.

351
01 сент. Répondre Mark 01 Sep 2012-09-01 23:35 '12 à 23:35 2012-09-01 23:35

Je préfère cette façon.

 git commit --amend -c <commit ID> 

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

312
10 янв. Réponse donnée par krevedko le 10 janvier 2013-01-10 17:23 '13 à 17:23 2013-01-10 17:23

Si vous utilisez l'outil graphique Git, il existe un bouton nommé dernier dernier commit. Cliquez sur ce bouton, puis affichez vos derniers fichiers de validation et message. Modifiez simplement ce message et vous pourrez le corriger avec un nouveau message de validation.

Ou utilisez cette commande depuis la console / terminal:

 git commit -a --amend -m "My new commit message" 
309
08 нояб. la réponse est donnée à Akhilraj NS le 08 novembre 2012-11-08 06:51 '12 à 6:51 am 2012-11-08 06:51

Vous pouvez utiliser git rebasing . Par exemple, si vous souhaitez revenir à commit bbc643cd, exécutez

 $ git rebase bbc643cd^ --interactive 

Dans l'éditeur par défaut, remplacez 'pick' par 'edit' dans la ligne dont vous voulez modifier la validation. Apportez des modifications puis exécutez-les avec

 $ git add <filepattern> 

Maintenant vous pouvez utiliser

 $ git commit --amend 

pour changer le commit, et ensuite

 $ git rebase --continue 

pour revenir à la fixation du chapitre précédent.

282
22 янв. la réponse est donnée par Shoaib Ud-Din le 22 janvier 2013-01-22 20:23 '13 à 20:23 2013-01-22 20:23
  • Si vous souhaitez modifier le dernier message de validation, procédez comme suit:

     git commit --amend 

    Cela vous mènera à votre éditeur de texte et vous permettra de changer le dernier message du commit.

  • Si vous souhaitez modifier les 3 derniers messages de validation ou tous les messages de validation à ce stade, mettez HEAD~3 sur la git rebase -i :

     git rebase -i HEAD~3 
275
22 окт. réponse donnée par Heena Hussain le 22 octobre 2012-10-22 14:22 '12 à 14h22 2012-10-22 14:22

Si vous devez modifier l’ancien message de validation en plusieurs branches (c’est-à-dire qu’un message avec un message d’erreur est présent dans plusieurs branches), vous pouvez utiliser:

256
15 нояб. La réponse est donnée par sebers le 15 novembre. 2012-11-15 12:29 '12 à 12:29 2012-11-15 12:29

utilisation de

 git commit --amend 

4. Écrasez l'historique de Git . Il vous indique également quand ne pas utiliser git commit --amend .

221
27 марта '13 в 23:43 2013-03-27 23:43 la réponse est donnée peau 27 mars 13 à 23:43 2013-03-27 23:43

Modifier

Vous avez plusieurs options. Tu peux faire

 git commit --amend 

jusqu'à ce qu'il soit exécuté en dernier.

Redirection interactive

Sinon, si ce n'est pas votre dernier commit, vous pouvez effectuer un redémarrage interactif,

 git rebase -i [branched_from] [hash before commit] 

Ensuite, dans la redirection interactive, vous ajoutez simplement une édition à ce commit. Lorsque cela se produit, faites git commit --amend et modifiez le message de validation. Si vous souhaitez revenir à ce point de fixation, vous pouvez également utiliser git reflog et simplement supprimer ce correctif. Ensuite, vous exécutez à nouveau git commit .

195
18 янв. Wallerjake donne la réponse le 18 janvier 2013-01-18 04:45 '13 à 04h45 2013-01-18 04:45

Si vous utilisez l'interface graphique de Git, vous pouvez modifier le dernier commit sur lequel vous n'avez pas cliqué:

 Commit/Amend Last Commit 
183
01 дек. La réponse est donnée par gulchrider 01 déc. 2012-12-01 08:03 '12 à 8:03 2012-12-01 08:03

S'il s'agit de votre dernier commit, corrigez-le :

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

(utilisez l' --only -o ( --only ) pour vous assurer que vous ne modifiez que le message de validation)


Si cela ressemble à un commit, utilisez une incroyable base interactive :

 git rebase -i @~9 # Show the last 9 commits in a text editor 

Recherchez le commit désiré, remplacez pick par r ( reword ), sauvegardez et fermez le fichier. Fait!



Miniature tutoriel vim (ou comment réinstaller seulement 8 frappes de touche 3j cw r Esc ZZ ):

  • Exécutez le vimtutor si vous avez le temps.
  • h j k l correspondent aux touches de navigation
  • Toutes les commandes peuvent avoir un préfixe de plage, par exemple. 3j se déplace sur 3 lignes
  • i , pour entrer en mode insertion - le texte que vous entrez apparaîtra dans le fichier
  • Echap ou Ctrl c pour quitter le mode insertion et revenir au mode normal.
  • u pour annuler
  • Ctrl r à répéter
  • dd , dw , dl pour supprimer une ligne, un mot ou une lettre, respectivement
  • cc , cw , cl pour changer une ligne, un mot ou une lettre, respectivement (identique à dd i )
  • yy , yw , yl pour copier ("yank") des lignes, des mots ou des lettres, respectivement
  • p ou p à insérer après ou avant la position actuelle, respectivement
  • :w Entrez pour enregistrer (écrire) le fichier
  • :q! Entrez exit sans sauvegarder
  • :wq Entrée ou ZZ pour enregistrer et quitter

Si vous modifiez beaucoup de texte, passez à la disposition du clavier Dvorak, apprenez à saisir au toucher et à apprendre vim. Vaut-il l'effort? Oui



ProTip ™: n'ayez pas peur d'expérimenter avec des commandes "dangereuses" qui réécrivent l'historique * - Git ne supprime pas vos correctifs pendant 90 jours par défaut; Vous pouvez les trouver dans le reflog:

 $ git reset @~3 # go back 3 commits $ git reflog c4f708b HEAD@{0}: reset: moving to @~3 2c52489 HEAD@{1}: commit: more changes 4a5246d HEAD@{2}: commit: make important changes e8571e4 HEAD@{3}: commit: make some changes ... earlier commits ... $ git reset 2c52489 ... and you're back where you started 

* Méfiez-vous des paramètres tels que --hard et --force , bien qu'ils puissent effacer les données.
* Ne réécrivez pas non plus l’historique dans les branches avec lesquelles vous coopérez.

170
10 февр. La réponse est donnée à Zaz le 10 février. 2015-02-10 03:01 '15 à 3:01 2015-02-10 03:01

J'utilise autant que possible l' interface graphique de Git , ce qui vous permet de modifier le dernier message:

2019

165
05 авг. la réponse est donnée par Havard Graff 05 août. 2013-08-05 02:13 '13 à 2:13 2013-08-05 02:13

Wow, il y a donc plusieurs façons de le faire.

Pour ce faire, vous pouvez également supprimer le dernier commit, mais enregistrez ses modifications pour ne pas perdre votre travail. Vous pouvez ensuite effectuer une autre validation avec un message corrigé. Cela ressemblera à ceci:

135
03 дек. La réponse est donnée par Radu Murzea 03 déc. 2013-12-03 00:31 '13 à 0:31 2013-12-03 00:31

Si vous voulez changer la dernière utilisation de commit:

 git commit --amend 

ou

124
07 янв. réponse donnée par Shubham Chaudhary le 07 janvier 2014-01-07 01:03 '14 à 1:03 2014-01-07 01:03

Pour ceux qui recherchent une interface utilisateur graphique pour Windows / Mac afin d’aider à la modification de vieux messages (c’est-à-dire pas seulement le message le plus récent), je recommanderais SourceTree . Les étapes à suivre ci-dessous.

2019

123
06 нояб. La réponse est donnée par Steve Chambers 06 nov. 2014-11-06 18:01 14 à 18:01 2014-11-06 18:01

Si vous souhaitez modifier le dernier message, vous devez utiliser l'indicateur --only ou son raccourci -o avec commit --amend :

122
23 мая '14 в 11:40 2014-05-23 11:40 a répondu à David Ongaro le 23 mai '14 à 11:40 2014-05-23 11:40

Mettez à jour le dernier message d'erreur avec un nouveau message de validation sur une ligne:

 # You can reset your head to n number of commit # NOT a good idea for changing last commit message # but you can get an idea to split commit into multiple commits git reset --soft HEAD^ # it will reset you last commit. Now, you # can re-commit it with new commit message. 

Utilisez reset pour diviser les commits en commits plus petits.

git reset peut vous aider à diviser un commit en plusieurs commits:

99
22 янв. la réponse est donnée przbadu 22 janvier 2014-01-22 11:57 14 à 11:57 2014-01-22 11:57

Il existe de nombreuses réponses à cette question, mais aucune d’elles n’explique en détail comment modifier les anciens messages de fixation avec VIM. J'essaie de le faire moi-même, je vais donc vous expliquer en détail comment je l'ai fait, en particulier pour les personnes qui n'ont aucune expérience de VIM!

Je voulais changer mes cinq derniers commits sur lesquels j'avais déjà cliqué sur le serveur. C'est assez «dangereux» si quelqu'un d'autre s'en tire, vous pouvez endommager des choses en changeant les messages de commit. Toutefois, lorsque vous travaillez sur votre petite branche et que vous êtes certain que personne ne l’a retirée, vous pouvez la modifier comme suit:

Supposons que vous vouliez changer vos cinq derniers commits, puis entrez ceci dans le terminal:

git rebase -i HEAD~5 * Où 5 est le nombre de messages de validation que vous souhaitez modifier. (donc si vous voulez changer le 10ème au dernier commit, entrez 10)

Cette commande vous mènera au VIM où vous pourrez éditer votre historique de commit. Vous verrez les 5 derniers commits en haut:

pick <commit hash> commit message

Au lieu de pick vous devez écrire un nouveau reword . Vous pouvez le faire dans VIM en tapant i , ce qui vous oblige à passer en mode INSERT. (Vous pouvez voir que vous êtes en mode insertion avec le mot INSERT ci-dessous). Pour les commits, vous voulez changer le type dans reword au lieu de pick

Ensuite, vous devez enregistrer et quitter cet écran. Pour ce faire, vous devez d'abord passer en mode commande en appuyant sur le bouton échap. (vous pouvez vérifier que vous êtes en mode commande si le mot INSERT disparaît en dessous). Ensuite, vous pouvez entrer une commande en tapant wq commande save and exit est wq . Par conséquent, si vous tapez :wq vous êtes, il aura raison.

Ensuite, VIM ira à tout message de validation que vous souhaitez réécrire. Vous pouvez ici modifier le message de validation. Pour ce faire, vous passez en mode INSERT, modifiez le message de validation, passez en mode commande, puis enregistrez et fermez. Faites-le 5 fois, et vous êtes hors de VIM!

Ensuite, si vous avez déjà envoyé vos mauvais commits, vous devez utiliser git push --force écraser. Rappelez-vous que git push --force est une chose assez dangereuse, alors assurez-vous que personne n'a tiré depuis le serveur, car vous avez appuyé sur vos erreurs de validation!

Maintenant, vous avez changé votre message commit!

(Comme vous pouvez le constater, je ne suis pas très expérimenté au VIM, donc si j’utilisais le mauvais "argot" pour expliquer ce qui se passait, n'hésitez pas à me corriger!)

82
07 авг. la réponse est donnée à Marijn le 07 août. 2014-08-07 12:18 14 à 12:18 2014-08-07 12:18

Vous pouvez utiliser git-rebase-reword

Il est conçu pour éditer n’importe quel commit (pas seulement le dernier), juste comme commit --amend

 $ git rebase-reword <commit-or-refname> 

Он назван в честь действия по интерактивной переадресации, чтобы исправить фиксацию: "изменить". См. этот пост и man -section interactive mode-

Exemples:

 $ git rebase-reword b68f560 $ git rebase-reword HEAD^ 
76
ответ дан albfan 21 февр. '15 в 15:21 2015-02-21 15:21

Я добавил псевдоним reci , recm для recommit (amend) it, теперь я могу сделать это с помощью git recm или git recm -m .

 $ vim ~/.gitconfig [alias] ...... cm = commit reci = commit --amend recm = commit --amend ...... 
76
ответ дан Chu-Siang Lai 06 янв. '14 в 10:24 2014-01-06 10:24