Comment changer l'auteur d'un commit pour un commit en particulier?

Je veux changer l'auteur d'un engagement particulier dans l'histoire. Ce n'est pas le dernier commit.

Je connais cette question - comment puis-je changer l'auteur d'un commit en git?

Mais je pense à quelque chose pour lequel j’identifie un commit par hash ou short hash.

1564
15 июня '10 в 7:00 2010-06-15 07:00 MicTech mis en place le 15 juin '10 à 7h00 2010-06-15 07:00
@ 9 réponses

Réabonnement interactif à partir d'un point antérieur à l'historique du commit que vous devez modifier ( git rebase -i <earliercommit> ). Dans la liste des commits qui ont été déplacés, modifiez le texte de pick en edit regard de la valeur de hachage de celle que vous souhaitez modifier. Ensuite, quand git vous invite à changer le commit, utilisez ceci:

 git commit --amend --author="Author Name <email@address.com>" 

Par exemple, si votre historique de validation ABCDE-f avec F HEAD et que vous souhaitez changer l'auteur de C et D , vous pouvez alors ...

  1. Spécifiez git rebase -i B ( voici un exemple de ce que vous verrez après l'exécution de la commande git rebase -i B )
    • si vous avez besoin de modifier A , utilisez git rebase -i --root
  2. changer les lignes pour C et D de pick to edit
  3. Dès que le rebase commence, il s’arrêtera d’abord sur C
  4. Vous devez faire git commit --amend --author="Author Name <email@address.com>"
  5. Puis git rebase --continue
  6. Ce sera à nouveau arrêter à D
  7. Ensuite, vous devez à nouveau git commit --amend --author="Author Name <email@address.com>"
  8. git rebase --continue
  9. La relocalisation sera terminée.
  10. Utilisez git push -f pour mettre à jour votre source avec les commits mis à jour.
2672
15 июня '10 в 7:31 2010-06-15 07:31 la réponse a été donnée à Amber le 15 juin '10 à 7h31. 2010-06-15 07:31

La réponse acceptée à cette question est l'utilisation étonnamment astucieuse de la relocalisation interactive, mais malheureusement, cela provoque des conflits si l'auteur que nous essayons de modifier est utilisé par l'auteur de la branche fusionnée par la suite. Dans le cas plus général, cela ne fonctionne pas lors du traitement des histoires sales.

Comme je crains d’exécuter des scripts qui dépendent de la définition et de la réinitialisation de variables d’environnement pour écraser l’historique de git, j’écris une nouvelle réponse basée sur ce message, similaire à cette réponse mais plus complète.

Ce qui suit est testé et fonctionne contrairement à la réponse associée. Supposons, par souci de clarté, que 03f482d6 est un commit, que nous essayons de remplacer, et 42627abe est un commit avec un nouvel auteur.

border=0
  1. Faites un engagement que nous essayons de changer.

     git checkout 03f482d6 
  2. Faites changer l'auteur.

     git commit --amend --author "New Author Name <New Author Email>" 

    Nous avons maintenant un nouveau commit avec un hash égal à 42627abe .

  3. Commander la branche d'origine.

  4. Remplacez l'ancien commit par un nouveau local.

     git replace 03f482d6 42627abe 
  5. Réécrivez tous les commits futurs en fonction du remplacement.

     git filter-branch -- --all 
  6. Supprimer le remplacement pour la propreté.

     git replace -d 03f482d6 
  7. Cliquez sur le nouvel historique (utilisez uniquement --force si les opérations suivantes échouent, et uniquement après avoir vérifié la fonctionnalité avec git log et / ou git diff ).

     git push --force-with-lease 

Au lieu de 4-6, vous pouvez simplement passer au nouveau commit:

 git rebase -i 42627abe 
369
04 марта '15 в 5:11 2015-03-04 05:11 la réponse est donnée merlin2011 Mars 04 '15 à 5:11 2015-03-04 05:11
09 июня '15 в 19:02 2015-06-09 19:02 La réponse est donnée par olivieradam666 le 09 juin '15 à 19:02. 2015-06-09 19:02
  • Réinitialiser votre adresse email dans la configuration:

    git config --global user.email example@email.com

  • Maintenant réinitialisez l'auteur de votre commit sans le modifier:

    git commit --amend --reset-author --no-edit

82
05 апр. la réponse est donnée pravbeatle 05 avril 2017-04-05 15:44 '17 à 15h44 2017-04-05 15:44

Vous pouvez changer l'auteur du dernier commit en utilisant la commande ci-dessous.

git commit --amend --author="Author Name <email@address.com>"

Cependant, si vous voulez changer le nom de plusieurs auteurs, c'est un peu difficile. Vous devez commencer une réinstallation interactive, puis marquer les commits comme corrects, puis les modifier un par un et terminer.

Démarrez le redémarrage avec git rebase -i . Il va vous montrer quelque chose comme ça.

Modifiez le mot-clé de pick à edit pour les commits pour lesquels vous souhaitez modifier le nom de l'auteur.

Fermez ensuite l'éditeur. Pour les débutants, appuyez sur Escape , puis tapez :wq et appuyez sur Enter .

Ensuite, vous verrez votre terminal comme si de rien n'était. Vous êtes en fait au milieu d’une permutation interactive. Maintenant, il est temps de changer le correctif de votre nom d'auteur en utilisant la commande ci-dessus. Il ouvrira à nouveau l'éditeur. Fermez et poursuivez le redémarrage avec git rebase --continue . Répétez la même chose pour la quantité de correctif que vous souhaitez modifier. Pouvez-vous vous assurer que le résumé interactif a pris fin lorsque vous avez reçu le message No rebase in progress? .

69
29 авг. la réponse est donnée par Fatih 29 août. 2015-08-29 03:52 '15 à 3:52 2015-08-29 03:52

Les réponses à la question à laquelle vous êtes connecté sont de bonnes réponses et couvrent votre situation (une autre question est plus générale, car elle implique la réécriture de plusieurs commits).

En guise de prétexte pour interroger git filter-branch j'ai écrit un script pour réécrire le nom de l'auteur et / ou l'adresse de son auteur pour ce commit:

15 июня '10 в 8:24 2010-06-15 08:24 Réponse donnée par Chris Johnsen le 15 juin '10 à 08:24 2010-06-15 08:24

Lors de l'exécution de git rebase -i il y a ce bit intéressant dans le document:

Si vous souhaitez réinitialiser deux ou plusieurs commits en un, remplacez la commande "pick" par un deuxième et les suivants par "squash" ou "fixup" . Si les commits avaient des auteurs différents, le fixateur plié sera attribué à l'auteur du premier commet. Le message de validation proposé pour une validation pliée est une concaténation des messages de validation de la première validation et des premières commandes à l'aide de la commande "squash" , mais les messages de validation sont omis à l'aide de la "fixup" .

  • Si vous avez une histoire ABCDEF ,
  • et vous voulez changer les commits B et D (= 2 commits),

alors vous pouvez faire:

  • git config user.name "Correct new name"
  • git config user.email "correct@new.email"
  • créer des commits vides (un pour chaque commit):
    • vous avez besoin d'un message pour le transfert
    • git commit --allow-empty -m "empty"
  • démarrer l'opération de redémarrage
    • git rebase -i B^
    • B^ sélectionne l'élément parent B
  • vous devez mettre un commit vide avant pour chaque commit de changer
  • Vous devez changer le pick en squash pour eux.

Un exemple de ce que git rebase -i B^ vous donnera:

 pick sha-commit-B some message pick sha-commit-C some message pick sha-commit-D some message pick sha-commit-E some message pick sha-commit-F some message # pick sha-commit-empty1 empty # pick sha-commit-empty2 empty 

changez le en:

 # change commit B author pick sha-commit-empty1 empty squash sha-commit-B some message # leave commit C alone pick sha-commit-C some message # change commit D author pick sha-commit-empty2 empty squash sha-commit-D some message # leave commit EF alone pick sha-commit-E some message pick sha-commit-F some message 

Il vous demandera d'éditer les messages:

 # This is a combination of 2 commits. # The first commit message is: empty # This is the 2nd commit message: ...some useful commit message there... 

et vous pouvez simplement supprimer les premières lignes.

12
28 авг. la réponse est donnée dnozay 28 août. 2013-08-28 04:03 '13 à 4:03 2013-08-28 04:03

Si vous utilisez un référentiel central, il vous reste une étape supplémentaire dans la réponse Ambre :

git push -f pour forcer la mise à jour d'un référentiel central.

Faites attention à ne pas avoir beaucoup de personnes dans une branche, cela peut entraîner une perte de cohérence.

11
20 дек. La réponse est donnée par Fabian76 le 20 décembre 2013-12-20 18:06 '13 à 18:06 2013-12-20 18:06

Correction devant:

2019

Autres questions sur tags ou Poser une question