Als ich anfing, Git zu benutzen, habe ich gerade ein gemacht git init
und angefangen, add
und zu rufen commit
. Jetzt fange ich an, aufmerksam zu sein, und ich kann sehen, dass meine Commits als cowens@localmachine
und nicht als die von mir gewünschte Adresse angezeigt werden. Es sieht so aus, als würde ich einstellen GIT_AUTHOR_EMAIL
und GIT_COMMITTER_EMAIL
tun, was ich will, aber ich habe immer noch die alten Commits mit der falschen E-Mail-Adresse / dem falschen Namen. Wie kann ich die alten Commits korrigieren?
76
git
für ähnliche Zwecke werden bei Stack Overflow besser gestellt .Antworten:
Sie können alle Festschreibungen mit einem einzigen Aufruf von git filter-branch korrigieren. Dies hat den gleichen Effekt wie Rebase, aber Sie müssen nur einen Befehl ausführen, um Ihren gesamten Verlauf zu korrigieren, anstatt jedes Commit einzeln zu korrigieren.
Sie können alle falschen E-Mails mit diesem Befehl reparieren:
Weitere Informationen finden Sie in den Git-Dokumenten
quelle
if [ "$GIT_AUTHOR_EMAIL" = "$oldemail" ]; then GIT_AUTHOR_EMAIL="$newemail"; fi
Gits filter-branch Befehl ist mächtig, aber es ist schrecklich unhandlich, ihn für etwas Nicht-Triviales zu verwenden, wie zum Beispiel, wenn Sie mehr als einen Autor zur Korrektur haben.
Hier ist eine Alternative, die ich nützlich fand und die die .mailmap-Funktion verwendet, die in der git-shortlog-Manpage beschrieben ist. Dies bietet einen Autoren-Zuordnungsmechanismus, den wir mit der Formatierungsfunktion von git log verwenden können. Wir können es verwenden, um die Befehle zu generieren, um eine benannte Folge von Commits auszuwählen und zu ändern.
Angenommen, Sie möchten die Urheberschaft für einen Zweig $ BRANCH korrigieren, beginnend mit einem Commit $ START.
Sie müssen eine .mailmap-Datei im obersten Verzeichnis Ihres Repositorys erstellen, die die vorhandenen Verfassernamen den richtigen zuordnet. Sie können eine Liste der vorhandenen Autorennamen erhalten mit:
Sie müssen am Ende eine .mailmap-Datei wie diese haben (sagen wir):
Jetzt können Sie die Formatierungsfunktion von git log verwenden, um die Befehle zum Umschreiben von $ BRANCH in $ BRANCH2 zu generieren.
Der erste Befehl erstellt einen neuen leeren Zweig, der aus dem Commit $ START hervorgeht. Bei jedem Festschreiben zwischen $ START und dann dem Ende von $ BRANCH übernimmt der zweite Befehl cherry das ursprüngliche Festschreiben bis zum Ende des aktuellen Zweigs $ BRANCH2 und ändert es, um den Autor korrekt festzulegen.
Dies gilt auch allgemein - fügen Sie dies in Ihre ~ / .gitconfig ein:
Wenn Sie also Autoren korrigieren müssen, müssen Sie jetzt nur noch eine .map-Datei generieren und Folgendes tun:
Die ursprüngliche Zweigreferenz kann der neuen zugewiesen und die neue gelöscht werden:
quelle
Kombinieren der Antwort von Wie behebe ich die Metainformation beim ersten Commit in Git?
quelle
Um jedbergs Antwort zu folgen: Sie können die
rebase -i
fraglichen Commits verwenden und bearbeiten. Wenn Siegit commit --amend --author <AUTHOR DETAILS>
und verwendengit rebase continue
, können Sie den Verlauf durchgehen und korrigieren.quelle