Comment modifier plusieurs commits dans Git pour changer d’auteur

J’ai fait une série de commits dans Git et je me rends compte maintenant que j’ai oublié de définir correctement les propriétés de mon nom d’utilisateur et de mon email d’utilisateur (nouvelle machine). Je n’ai pas encore poussé ces commits sur mon repository, alors comment puis-je corriger ces commits avant de le faire (seuls les 3 derniers commits sur la twig principale)?

J’ai examiné git reset et git commit -C --reset-author , mais je ne pense pas être sur la bonne voie.

Rebase / amend semble inefficace lorsque vous avez le pouvoir de filter-branch au bout des doigts:

 git filter-branch --env-filter 'if [ "$GIT_AUTHOR_EMAIL" = "incorrect@email" ]; then GIT_AUTHOR_EMAIL=correct@email; GIT_AUTHOR_NAME="Correct Name"; GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL; GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; fi' -- --all 

(répartie sur plusieurs lignes pour plus de clarté, mais pas nécessaire)

Assurez-vous d’inspecter le résultat lorsque vous avez terminé, pour vous assurer que vous n’avez rien changé à votre volonté!

L’approche de rebase interactive est très intéressante lorsqu’elle est utilisée avec exec. Vous pouvez exécuter n’importe quelle commande shell contre un commit spécifique ou tous les commits dans le rebase.

Commencez par définir vos parameters d’auteur Git

 git config --global user.name "John Doe" git config --global user.email johndoe@example.com 

Ensuite, pour réinitialiser l’auteur pour tous les commits après le SHA donné

 git rebase -i YOUR_SHA -x "git commit --amend --reset-author -CHEAD" 

Cela fera apparaître votre éditeur pour confirmer les modifications. Tout ce que vous avez à faire est de sauvegarder et de quitter et cela passera par chaque validation et exécutera la commande spécifiée dans l’option -x.

Selon le commentaire de @ Dave ci-dessous, vous pouvez également modifier l’auteur tout en conservant les horodatages d’origine avec:

 git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name ' -CHEAD" 

Pour changer l’auteur uniquement pour le dernier commit:

 git commit --amend --author 'Author Name ' --no-edit 

Supposons que vous souhaitiez seulement changer l’auteur pour le dernier N commits:

 git rebase -i HEAD~4 -x "git commit --amend --author 'Author Name ' --no-edit" 

REMARQUES

  • l’indicateur --no-edit s’assure que git commit --amend ne demande pas de confirmation supplémentaire
  • Lorsque vous utilisez git rebase -i , vous pouvez sélectionner manuellement les commits pour modifier l’auteur,

le fichier que vous éditez ressemblera à ceci:

 pick 897fe9e simplify code a little pick abb60f9 add new feature exec git commit --amend --author 'Author Name ' --no-edit pick dc18f70 bugfix 

Je crois que ce que vous cherchez est git rebase --interactive

Il vous permet d’aller réinitialiser un commit spécifique, puis de jeter l’historique en changeant l’ajout ou le regroupement des commits

Vous avez ici une explication http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

Si vous ne vous sentez pas à l’abri de la dévalorisation et de la modification, vous pouvez le faire de cette façon. En même temps, vous définiriez également la configuration globale que vous vouliez probablement faire.

git reset HEAD~ (défaire le dernier commit)

git config --global user.name "Your Name"

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

git commit -m "message"