Je veux changer l'auteur d'un commit spécifique dans l'histoire. Ce n'est pas le dernier commit.
Je connais cette question - Comment changer l'auteur d'un commit dans git?
Mais je pense à quelque chose, où j'identifie la validation par hachage ou par hachage court.
git
git-commit
MicTech
la source
la source
Réponses:
Rebase interactive hors d'un point plus tôt dans l'historique que la validation que vous devez modifier (
git rebase -i <earliercommit>
). Dans la liste des validations rebasées, changez le texte depick
àedit
côté du hachage de celui que vous souhaitez modifier. Ensuite, lorsque git vous invite à modifier le commit, utilisez ceci:Par exemple, si votre historique de commit est
A-B-C-D-E-F
avecF
asHEAD
, et que vous voulez changer l'auteur deC
andD
, alors vous ...git rebase -i B
( voici un exemple de ce que vous verrez après avoir exécuté lagit rebase -i B
commande )A
, utilisezgit rebase -i --root
C
etD
depick
àedit
:wq
).C
git commit --amend --author="Author Name <[email protected]>"
git rebase --continue
D
git commit --amend --author="Author Name <[email protected]>"
nouveaugit rebase --continue
git push -f
pour mettre à jour votre origine avec les commits mis à jour.la source
git rebase -i <commit>
vim
. Pour enregistrer et quitter, tapez Esc: wq Entrée. D'un autre côté, si c'est Nano et que vous voyez des choses comme "WriteOut: ^ O" en bas, alors vous devriez utiliser Ctrl + O, Entrée, Ctrl + X à la place.--no-edit
option.git commit --amend --reset-author --no-edit
n'ouvrira pas d'éditeur. Disponible depuis git 1.7.9.git rebase -i --root
La réponse acceptée à cette question est une utilisation merveilleusement intelligente de rebase interactif, mais il présente malheureusement des conflits si le commit dont nous essayons de changer l'auteur était sur une branche qui a ensuite été fusionnée. Plus généralement, cela ne fonctionne pas lors de la gestion des histoires en désordre.
Étant donné que je crains d'exécuter des scripts qui dépendent de la définition et de la suppression des variables d'environnement pour réécrire l'historique git, j'écris une nouvelle réponse basée sur ce message qui est similaire à cette réponse mais est plus complète.
Ce qui suit est testé et fonctionne, contrairement à la réponse liée. Supposons, pour plus de clarté, que
03f482d6
le commit dont nous essayons de remplacer42627abe
l'auteur soit le commit avec le nouvel auteur.Découvrez le commit que nous essayons de modifier.
Faites changer l'auteur.
Nous avons maintenant un nouveau commit avec le hachage supposé être
42627abe
.Commander la branche d'origine.
Remplacez l'ancien commit localement par le nouveau.
Réécrivez tous les futurs commits basés sur le remplacement.
Retirez le remplacement pour la propreté.
Poussez le nouvel historique (utilisez uniquement --force en cas d'échec ci-dessous, et uniquement après avoir vérifié l'intégrité avec
git log
et / ougit diff
).Au lieu de 4-6, vous pouvez simplement rebaser sur un nouveau commit:
la source
git rebase -i
. Jamais entendu parler de cettegit replace
chose auparavant. +1--force-with-lease
au lieu de-f
. C'est plus sûr.git filter-branch -- --all
les commits changent dans toutes les branches dans lesquelles se trouvait le commit d'origine. Si vous n'avez pas suffisamment d'informations d'identification (ou si vous ne voulez tout simplement pas modifier l'historique des autres branches), il est bon d'être prudent avec cette réponse.La documentation Github contient un script qui remplace les informations de validation pour toutes les validations dans une branche .
Exécutez le script suivant à partir du terminal après avoir modifié les valeurs des variables
Poussez l'historique corrigé vers GitHub:
OU si vous souhaitez pousser les références sélectionnées des branches, utilisez
la source
clone
/push
, vous vous retrouverez avec un espace de noms de sauvegarderefs/original/
. Je n'ai pas trouvé de moyen de supprimer intelligemment cet espace de noms, j'ai donc fini par supprimer le répertoire.git/refs/original
, ce qui a fonctionné.git push -f
forcer les modifications push du dépôt.Réinitialisez votre e-mail dans la configuration à l'échelle mondiale:
git config --global user.email [email protected]
Maintenant, réinitialisez l'auteur de votre commit sans modification requise:
git commit --amend --reset-author --no-edit
la source
It's not last commit.
Alors, comment le feraient-ilsamend
?git reset HEAD~
, a exécuté vos lignes suggérées, puis a fait le prochain commit manuellement à nouveau. A bien fonctionné!git config --local user.name FirstName LastName
etgit config --local user.email [email protected]
. Appliquer ensuite aux six derniers commits en utilisantgit rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6
. Enfin pousser à repo Git à distance à l' aidegit push --force-with-lease
.Vous pouvez changer l'auteur du dernier commit en utilisant la commande ci-dessous.
git commit --amend --author="Author Name <[email protected]>"
Cependant, si vous voulez changer plus d'un nom d'auteur de commit, c'est un peu délicat. Vous devez démarrer un rebase interactif puis marquer les validations comme éditer puis les modifier un par un et terminer.
Commencez à rebaser avec
git rebase -i
. Cela vous montrera quelque chose comme ça.Remplacez le
pick
mot - cléedit
par les validations pour lesquelles vous souhaitez modifier le nom de l'auteur.Fermez ensuite l'éditeur. Pour les débutants, appuyez sur
Escape
puis tapez:wq
et appuyez surEnter
.Ensuite, vous verrez votre terminal comme si rien ne s'était passé. En fait, vous êtes au milieu d'un rebase interactif. Il est maintenant temps de modifier le nom d'auteur de votre commit à l'aide de la commande ci-dessus. Cela ouvrira à nouveau l'éditeur. Quittez et continuez avec rebase
git rebase --continue
. Répétez la même chose pour le nombre de validations que vous souhaitez modifier. Vous pouvez vous assurer que le rebase interactif est terminé lorsque vous recevez leNo rebase in progress?
message.la source
pick
action et ajouter après chaque ligneexec git commit --no-edit --amend --author="MyNewAuthor <[email protected]>"
Les réponses à la question à laquelle vous avez lié sont de bonnes réponses et couvrent votre situation (l'autre question est plus générale car elle implique de réécrire plusieurs commits).
Comme excuse pour essayer
git filter-branch
, j'ai écrit un script pour réécrire le nom de l'auteur et / ou le courriel de l'auteur pour un commit donné:la source
S'engager avant:
Pour corriger l'auteur de toutes les validations, vous pouvez appliquer la commande à partir de la réponse de @ Amber:
Ou pour réutiliser votre nom et votre e-mail, vous pouvez simplement écrire:
Validez après la commande:
Par exemple pour tout changer à partir de
4025621
:Vous devez courir:
Remarque: Pour inclure un auteur contenant des espaces tels qu'un nom et une adresse e-mail, l'auteur doit être entouré de guillemets d'échappement. Par exemple:
ou ajoutez cet alias dans
~/.gitconfig
:Et puis exécutez:
la source
git shortlog -e -s
.La réponse d' Amber comporte une étape supplémentaire si vous utilisez un référentiel centralisé:
git push -f
pour forcer la mise à jour du référentiel central.Attention, il n'y a pas beaucoup de personnes travaillant sur la même branche car cela peut ruiner la cohérence.
la source
Lorsque vous faites cela,
git rebase -i
il y a ce morceau intéressant dans le document:A-B-C-D-E-F
,B
etD
(= 2 validations),alors vous pouvez faire:
git config user.name "Correct new name"
git config user.email "[email protected]"
git commit --allow-empty -m "empty"
git rebase -i B^
B^
sélectionne le parent deB
.pick
àsquash
ceux.Exemple de ce
git rebase -i B^
qui vous donnera:changer cela en:
Il vous demandera de modifier les messages:
et vous pouvez simplement supprimer les premières lignes.
la source
Conformément à la réponse d' Eugen Konkov , pour commencer à partir de la validation racine, utilisez
--root
flag. Le--no-edit
drapeau est utile aussila source
Trouvez un moyen qui peut changer rapidement d'utilisateur et n'a aucun effet secondaire sur les autres validations.
Manière simple et claire:
opérations détaillées
refs/heads/master.
la source
Si la validation que vous souhaitez modifier n'est pas la dernière validation, suivez les étapes ci-dessous. Si votre commit est dans une branche différente, passez d'abord à cette branche.
git checkout nom_branche
Recherchez commit avant le commit que vous souhaitez modifier et recherchez son hachage. Exécutez ensuite la commande rebase.
git rebase -i -p hachage de commit
Ensuite, un éditeur s'ouvrira et entrera «modifier» pour les commits que vous souhaitez modifier. Laissez les autres avec l'option de «sélection» par défaut. Une fois modifié, entrez la touche 'esc' et wq! pour quitter.
Exécutez ensuite la commande git commit avec l'option de modification.
git commit --amend --author = "Nom d'utilisateur email" --no-edit
Exécutez ensuite la commande suivante.
git rebase --continue
Une fois l'auteur du commit mis à jour dans le référentiel local, envoyez les modifications au référentiel distant.
la source
Il existe également une approche paresseuse de ce problème, en particulier si vous souhaitez modifier plusieurs validations. Dans mon cas, j'avais une nouvelle branche avec plusieurs commits avec un mauvais auteur, donc ce qui m'a aidé:
Accédez à votre succursale d'origine:
Créez-en une nouvelle branche:
Fusionnez-le sans valider les informations en un seul commit:
Vous pouvez également souhaiter mettre en place des modifications:
Modifiez le nom de l'auteur et validez les modifications:
Et c'est tout, vous pouvez pousser les changements.
Vous pouvez ensuite supprimer la branche avec un mauvais auteur.
la source
Étapes pour renommer le nom de l'auteur après l'envoi de la validation
git rebase i HEAD ~ 10 (10 est le commit total à afficher sur rebase)
If you Get anything like below
fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please rm -fr ".git/rebase-merge" and run me again. I am stopping in case you still have something valuable there.
Tapez ensuite "git rebase --continue" ou "git rebase --abort" selon vos besoins
pick 897fe9e simplify code a little
pick abb60f9 add new feature
pick dc18f70 bugfix
Maintenant, vous devez ajouter la commande ci-dessous juste en dessous du commit que vous souhaitez modifier, comme ci-dessous
pick 897fe9e simplify code a little exec git commit --amend --author 'Author Name <[email protected]>' pick abb60f9 add new feature exec git commit --amend --author 'Author Name <[email protected]>' pick dc18f70 bugfix exec git commit --amend --author 'Author Name <[email protected]>'
Voilà, maintenant appuyez simplement sur ESC,: wq et vous êtes tous ensemble
Puis git push origin HEAD: BRANCH NAME -f [veuillez prendre soin de -f Force push]
comme
git push -f
ougit push origin HEAD: dev -f
la source
git push
commande?Changer le nom et l'adresse e-mail de votre partenaire à l'échelle mondiale:
Modification du nom et de l'e-mail de votre committer par référentiel:
Modification des informations sur l'auteur juste pour la prochaine validation:
Astuce : Pour toute autre situation et lire plus d'informations, lisez la référence de l'article .
la source
Si vous devez changer le commit AUTHOR OF THE LAST et qu'aucun autre n'utilise votre dépôt, vous pouvez annuler votre dernier commit avec:
changez le nom de l'auteur de votre commit avec:
Quittez l'éditeur qui s'ouvre et repoussez votre code:
la source
Pour le message de validation de fusion, j'ai constaté que je ne pouvais pas le modifier en utilisant
rebase
, au moins sur gitlab. Il montre la fusion comme un commit mais je ne peux pas rebaser sur ce #sha. J'ai trouvé ce message utile.Ces trois lignes de code ont fait le travail pour changer le message de validation de fusion (comme l'auteur).
la source
vous pouvez utiliser ces commandes depuis la page officielle de github
https://help.github.com/en/github/using-git/changing-author-info
voici les commandes
Ici, vous pouvez changer l'ancien e-mail pour un nouveau nom d'utilisateur et une nouvelle adresse e-mail.
la source