
BieneFriedmann
In den letzten Tagen habe ich einen anderen Laptop verwendet, ich habe Git eingerichtet und mich angemeldet, aber ich habe versehentlich meinen Benutzernamen mit einer falschen E-Mail verwendet.
Heute ist mir aufgefallen, dass meine Commits der letzten Tage nicht auf meinem Github-Profil-Dashboard angezeigt wurden, also habe ich nachgesehen, was los ist, und festgestellt, dass ich die falsche E-Mail-Adresse für die Anmeldung verwendet habe.
Ich habe verschiedene Möglichkeiten ausprobiert, um das Problem zu beheben, aber keine davon hat funktioniert.
1.
git rebase -i -p <The last commit with the good email>
Dann für jeden Commit.
git commit --amend --author="good name <good email>" --no-edit
git rebase --continue
Anstatt nur den Autor der Commits zu ändern, wurden neue Commits mit meiner guten E-Mail erstellt, aber die alten nicht geändert.
2.
git filter-branch --env-filter 'if [ "$GIT_AUTHOR_EMAIL" = "[email protected]" ]; then
[email protected];
GIT_AUTHOR_NAME="Correct Name";
GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL;
GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; fi' -- --all
wie hier zu sehen, aber es hat nichts gebracht …
3.
In einer der Antworten erwähnte jemand, dass ich denselben Befehl verwenden sollte wie ich.
git rebase -i -p <The last commit with the good email>
aber ohne das “-p”. Ich habe es versucht, aber es hat auch neue Commits gemacht und die alten Commits mit den alten Daten nicht beibehalten.
Also brauche ich Hilfe, um alle neuen Commits meines Verlaufs zu bekommen und die alten zu reparieren, um die gute E-Mail zu haben.
Vielen Dank an alle, die mitgeholfen haben! Am Ende habe ich viele verschiedene Ansätze bekommen, aber es hat bei mir nicht geklappt. Am Ende musste ich mein Repo mehrmals auf den Zustand vor den Änderungen zurücksetzen, weil die Dinge durcheinander geraten sind.
Am Ende habe ich mich an den Github-Support gewandt, und das haben sie mir gesagt, und es hat funktioniert. Ich poste es hier in der Hoffnung, dass es jemandem helfen würde, der ein ähnliches Problem hat.
PS Dies ist dieser hier vorgeschlagenen Antwort ziemlich ähnlich, aber diese Antwort hat nicht funktioniert, als ich es versuchte. Dieser hat einige geringfügige Änderungen (Klonen einer bloßen Kopie und Durchführen der Änderung dort) und es hat funktioniert.
1 – Bevor Sie dieses Skript ausführen, benötigen Sie:
Die alte E-Mail-Adresse, die in den Autoren-/Committer-Feldern erscheint, die Sie ändern möchten. Den korrekten Namen und die E-Mail-Adresse, denen solche Commits zugeordnet werden sollen. 2 – Erstellen Sie einen neuen, bloßen Klon Ihres Repositorys:
git clone --bare <external repo URL>.git
cd <reponame>.git
3 – Kopieren Sie das Skript und fügen Sie es ein, wobei Sie die folgenden Variablen basierend auf den gesammelten Informationen ersetzen:
OLD_EMAIL
CORRECT_NAME
CORRECT_EMAIL
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="[email protected]"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="[email protected]"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
4 – Drücken Sie die Eingabetaste, um das Skript auszuführen.
5 – Überprüfen Sie den neuen Git-Verlauf auf Fehler.
6 – Pushen Sie den korrigierten Verlauf an:
git push --mirror <GitHub repo URL>.git
7 – Bereinigen Sie den temporären Klon:
cd ..
rm -rf <reponame>.git

VonC
Versuchen Sie es zuerst und klonen Sie das Repository in a getrennt lokalen Ordner, um den folgenden Befehl zu testen.
Sie müssen installieren newren/git-filter-repo um den Autor von Ihrem alten Konto auf Ihr neues Konto umzuschreiben.
Siehe „Wie ändere ich den Commit-Autor für mehrere Commits mithilfe des Filterzweigs?“ und
“git filter-repo
/ Benutzer- und E-Mail-basierte Filterung“
git filter-repo --mailmap my-mailmap
mit my-mailmap
:
Correct Name <[email protected]> <[email protected]>
Dadurch werden Ihre Commits mit dem richtigen Autor neu geschrieben.
Sie müssen dann git push --force
(vorausgesetzt eins main
Branch), um den Remote-Verlauf mit Ihren neuen Commits zu überschreiben. Wenn Sie nicht alleine am Remote-Repository arbeiten, teilen Sie dies Ihren Mitarbeitern mit.

Anubhav Gupta
Sie waren der richtigen Methode sehr nahe. Nur nicht hinzufügen -p
beim Umbasieren.
Laut Git-Dokumentation,
https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt—preserve-merges
-p
Option – Merge-Commits neu erstellen, anstatt den Verlauf zu glätten, indem Commits wiederholt werden, die ein Merge-Commit einführt.
Ich habe die gleichen Schritte ausgeführt, die Sie in Ihrer Frage erwähnt haben, ohne -p
, und es funktionierte einwandfrei. Hier ist die Liste der Schritte, falls Sie es brauchen.
Klonen Sie zunächst das Repo lokal und führen Sie eine interaktive Rebase für alle Commits durch.
git rebase --interactive COMMIT~
Zum Beispiel :-
git rebase --interactive 8020fc5fe36d75b066f7c06a29c92a29ccf6e2b4~
wo 8020fc5fe36d75b066f7c06a29c92a29ccf6e2b4
ist der älteste Commit, ab dem Sie mit der Reparatur beginnen möchten.
Sie können diesen Wert von erhalten git log
Nach dem Rennen git rebase
haben Sie einen Texteditor mit Optionen zu pick
/edit
/… für jeden Commit.
Nehmen wir ein Beispiel, wo Sie so etwas bekommen …
pick 8020fc5 1
pick e99c3c7 2
pick 7c4f81e 3
pick 3b30037 4
pick 98d901b 5
pick 8ded5a1 6
pick 5a61adc 7
pick 8fe082c 8
pick 1abebc1 9
Ändern Sie für alle Commits, für die Sie den Autor ändern möchten, den Befehl in edit
aus pick
Wie im folgenden Beispiel möchte ich die Autoren für ändern 3
und 5
so
pick 8020fc5 1
pick e99c3c7 2
edit 7c4f81e 3 #changed here
pick 3b30037 4
edit 98d901b 5 #changed here
pick 8ded5a1 6
pick 5a61adc 7
pick 8fe082c 8
pick 1abebc1 9
Speichern Sie nun die Datei und beenden Sie sie.
Dann befinden Sie sich an dem Punkt, kurz bevor Sie das erste Commit anwenden, auf das Sie sich festgelegt haben edit
.
Führen Sie die folgenden Schritte aus, ohne etwas zu ändern.
git commit --amend --author="NAME <EMAIL>" --no-edit
git rebase --continue
Danach befindet sich das Repository an dem Punkt kurz vor dem Anwenden des zweiten von Ihnen ausgewählten Commits edit
also wiederholen Sie es, bis Sie fertig sind
Aktualisieren:
git rebase --committer-date-is-author-date HASH
wobei HASH der erste Commit mit dem richtigen Zeitstempel ist.
Dann mach git log --format=fuller
um zu sehen, ob die Commit-Zeitstempel Ihren Wünschen entsprechen.
10120000cookie-checkWie ändere ich den Autor eines Commits für die letzten paar Commits in Github richtig?yes
Diese Frage wurde auf Meta erwähnt.
– Yiv
15. Juli 2021 um 7:16 Uhr
Okay, Sie haben uns keine Fehlermeldungen gegeben, die Sie erhalten, aber: Stellen Sie sicher, dass Sie Ihre neuen Commits nicht entfernt haben 🙂 Wie bereits in der von Ihnen bereits erwähnten Antwort gepostet und auch unten, wenn Sie alles lokal behoben haben, Sie müssen es richtig auf den Server bringen, und das wäre, indem Sie es mit dem machen
forced
Flag: “git push –force”– Janos Vinceller
18. Juli 2021 um 17:43 Uhr
@JanosVinceller Ich habe keine Fehler bekommen. Es hat nur den Autor überhaupt nicht geändert.
– BieneFriedmann
18. Juli 2021 um 20:15 Uhr
@BeeFriedman OK: würde
git filter-repo
arbeite besser?– VonC
18. Juli 2021 um 20:17 Uhr
COMMITS KÖNNEN NICHT GEÄNDERT WERDEN. Sie können neue erstellen und Etiketten neu aufhängen, sodass die Etiketten auf sie statt auf die Originale verweisen, aber COMMITS KÖNNEN NICHT GEÄNDERT WERDEN.
– jthill
20. Juli 2021 um 19:42 Uhr