Quand j'ai commencé à utiliser git, je viens de faire un git init
appel add
et j'ai commencé à appeler commit
. Maintenant, je commence à faire attention et je peux voir que mes commits apparaissent cowens@localmachine
plutôt que l'adresse que je veux. Il semble que ce soit paramétrant GIT_AUTHOR_EMAIL
et GIT_COMMITTER_EMAIL
que je fasse ce que je veux, mais j'ai toujours ces anciens commits avec une adresse email / un nom incorrect. Comment puis-je corriger les anciens commits?
76
git
Il est préférable de poser des questions sur l'utilisation à des fins similaires à Stack Overflow .Réponses:
Vous pouvez revenir en arrière et corriger tous vos commits avec un seul appel à git filter-branch. Cela a le même effet que rebase, mais vous n'avez besoin que d'une seule commande pour corriger tout votre historique, au lieu de corriger chaque commit individuellement.
Vous pouvez corriger tous les mauvais emails avec cette commande:
Plus d'informations sont disponibles dans la documentation de git
la source
if [ "$GIT_AUTHOR_EMAIL" = "$oldemail" ]; then GIT_AUTHOR_EMAIL="$newemail"; fi
La commande filter-branch de Git est puissante, mais elle est terriblement difficile à utiliser pour tout ce qui n'est pas trivial, comme par exemple si vous avez plus d'un auteur à corriger.
Voici une alternative que j'ai trouvée utile, qui utilise la fonctionnalité .mailmap décrite dans la page de manuel git-shortlog. Cela fournit un mécanisme de correspondance des auteurs que nous pouvons utiliser avec la fonction de formatage de git log. Nous pouvons l'utiliser pour générer les commandes permettant de sélectionner et de modifier une séquence nommée de commits.
Par exemple, supposons que vous souhaitiez corriger la paternité d'une branche $ BRANCH, à partir du commit $ START.
Vous devez créer un fichier .mailmap dans le répertoire supérieur de votre référentiel, qui mappe les noms d’auteurs existants sur les noms corrects. Vous pouvez obtenir une liste des noms d’auteurs existants avec:
Vous devez vous retrouver avec un fichier .mailmap comme ceci (par exemple):
Vous pouvez maintenant utiliser la fonctionnalité de formatage de git log pour générer les commandes permettant de réécrire $ BRANCH en tant que $ BRANCH2.
La première commande crée une nouvelle branche vide issue du commit $ START. Pour chaque commit entre $ START et ensuite fin de $ BRANCH, la deuxième commande sélectionne le commit d'origine à la fin de la branche actuelle $ BRANCH2 et le modifie pour définir l'auteur correctement.
Ceci est aussi généralement applicable - mettez ceci dans votre ~ / .gitconfig:
Donc, lorsque vous avez besoin de corriger les auteurs, vous devez maintenant générer un fichier .map et faire:
La référence de branche d'origine peut être réaffectée à la nouvelle, et la nouvelle supprimée:
la source
Combinaison de la réponse de Comment résoudre la métainformation lors du premier commit dans git?
la source
Pour suivre la réponse de jedberg: Vous pouvez utiliser
rebase -i
et choisir d’éditer les commits en question. Si vous utilisezgit commit --amend --author <AUTHOR DETAILS>
et puisgit rebase continue
vous pouvez parcourir et corriger l'historique.la source