J'ai fait une série de commits dans Git et je me rends compte maintenant que j'ai oublié de définir correctement mon nom d'utilisateur et mes propriétés de messagerie utilisateur (nouvelle machine). Je n'ai pas encore poussé ces commits dans mon référentiel, alors comment puis-je corriger ces commits avant de le faire (seulement les 3 derniers commits sur la branche master)?
J'ai regardé git reset
et git commit -C <id> --reset-author
, mais je ne pense pas que je suis sur la bonne voie.
git
git-commit
git-rewrite-history
Pauldoo
la source
la source
remote: error: GH007: Your push would publish a private email address.
... `! [distant rejeté] maître -> maître (push refusé en raison de restrictions de confidentialité des e-mails) `.Réponses:
Rebase / modifier semble inefficace, lorsque vous avez la puissance de la branche de filtre à portée de main:
(divisé entre les 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 intention!
la source
git filter-branch --help
est assez simple :)--tag-name-filter cat
aufilter-branch
pour migrer les balises vers le nouvel historique. Il utilise également--branches --tags
au lieu de--all
, qui ne réécrit que l'historique des branches et des balises et laisse les autresrefs
seuls (bien que cela ne fasse probablement pas beaucoup de différence à moins que vous ne l'utilisiez, par exemplegit-notes
)-- --all
parHEAD~1..HEAD
git log HEAD~2..HEAD
?L'approche de rebase interactif est assez agréable lorsqu'elle est utilisée en conjonction avec exec. Vous pouvez exécuter n'importe quelle commande shell contre un commit spécifique ou tous les commits dans le rebase.
Définissez d'abord vos paramètres d'auteur git
Ensuite, pour réinitialiser l'auteur pour tous les commits après le SHA donné
Cela fera apparaître votre éditeur pour confirmer les modifications. Tout ce que vous avez à faire ici est de sauvegarder et de quitter et il passera par chaque commit et exécutera la commande spécifiée dans l'indicateur -x.
Selon le commentaire de @ Dave ci-dessous, vous pouvez également changer l'auteur tout en conservant les horodatages d'origine avec:
la source
filter-branch
si vous voulez juste corriger vos derniers commits :). Notez cependant que cela modifie l'horodatage des validations.git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <[email protected]>' -CHEAD"
git log
également montré l'ancienne paternité pour moi, mais le statut de git identifiait correctement les nouveaux commits et après une poussée forcée, ils étaient comme je l'avais prévu.git rebase -i --root …
au lieu de passer un SHA.Pour changer l'auteur uniquement pour le dernier commit:
Supposons que vous souhaitiez uniquement modifier l'auteur des N derniers validations:
REMARQUES
--no-edit
drapeau s'assure que legit commit --amend
ne demande pas de confirmation supplémentairegit rebase -i
, vous pouvez sélectionner manuellement les commits où changer l'auteur,le fichier que vous éditez ressemblera à ceci:
la source
--rebase-merges
une-r
option (courte ), pour garder la topologie de votre branche intacte si elle contient des fusions.Cette méthode a été documentée par github dans ce but précis. Les étapes sont:
OLD_EMAIL
,CORRECT_EMAIL
etCORRECT_NAME
)git push --force --tags origin 'refs/heads/*'
et vous avez terminé!la source
Je crois que ce que tu cherches est
git rebase --interactive
Il vous permet de revenir à un commit spécifique, puis de lancer l'historique des modifications en ajoutant ou en regroupant les commits
Ici vous avez une explication https://web.archive.org/web/20100213104931/http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase -interactif
la source
Si vous ne vous sentez pas en sécurité à propos de l'avilissement 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 de toute façon.
git reset HEAD~
(annuler le dernier commit)git config --global user.name "Your Name"
git config --global user.email [email protected]
git commit -m "message"
la source