Ich habe eine Reihe von Commits für ein Projekt auf Github festgelegt, jedoch festgestellt, dass ich auf dem Computer, auf dem ich meine Commits mache, und damit den Avatar und die E-Mail-Adresse des Benutzers nicht den richtigen Namen für E-Mail und Committer eingerichtet habe sind nicht da.
Wie kann ich alle früheren Commit-E-Mails und Benutzernamen umschreiben?
Antworten:
Sie können diesen Alias hinzufügen:
So ändern Sie den Autorennamen:
oder die E-Mail nur für die letzten 10 Commits:
Alias:
Quelle: https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig
quelle
git change-commits GIT_COMMITTER_EMAIL "[email protected]" "[email protected]"
um die Committer-E-Mail zu ändern.change-commits = "!f() { VAR1=$1; VAR='$'$1; OLD=$2; NEW=$3; echo \"Are you sure for replace $VAR $OLD => $NEW ?(Y/N)\";read OK;if [ \"$OK\" = 'Y' ] ; then shift 3; git filter-branch --env-filter \"if [ \\\"${VAR}\\\" = '$OLD' ]; then export $VAR1='$NEW';echo 'to $NEW'; fi\" $@; fi;}; f "
Cannot create a new backup. A previous backup already exists in refs/original/
Die Lösung ist bereits da: Ändern Sie den Namen des Autors und des Committers sowie die E-Mail-Adresse mehrerer Commits in Git
Nämlich,
quelle
Wenn Sie bereits einige Ihrer Commits in das öffentliche Repository verschoben haben, ist dies nicht der Fall möchten tun, da sonst eine alternative Version des Master-Verlaufs erstellt wird, die andere möglicherweise verwendet haben. "Überquere nicht die Bäche ... Es wäre schlimm ..."
Das heißt, wenn es nur die Commits sind, die Sie in Ihrem lokalen Repository vorgenommen haben, beheben Sie dies auf jeden Fall, bevor Sie auf den Server hochschieben. Sie können den
git filter-branch
Befehl mit der--commit-filter
Option verwenden, sodass nur Commits bearbeitet werden, die Ihren falschen Informationen entsprechen, wie folgt:quelle
git update-ref -d refs/original/refs/heads/master
, siehe < stackoverflow.com/a/7654880/333403 >.A previous backup already exists in refs/original/
In diesem Fall-f
stöhnt es Sie mit folgendem Fehler an: Führen Sie es in diesem Fall mit der neuen E-Mail erneut aus und fügen Sie vor dem --commit-Filter ein hinzu. Verwendung nach eigenem Ermessen. Normalerweise-f
ist es gefährlich, ohne zu wissen, was es tut.Nach Anwendung der Antwort von Olivier Verdier:
... um den geänderten Verlauf auf das ursprüngliche Repository zu übertragen, verwenden Sie:
Der obige Befehl (beachten Sie das Plus) erzwingt das Umschreiben des Verlaufs auch auf dem ursprünglichen Repo. Mit Vorsicht verwenden!
quelle
https://help.github.com/articles/changing-author-info/
das hat bei mir total geklappt. Stellen Sie nach dem Push von Git sicher, dass das Update im Webportal von Git angezeigt wird. Wenn das Commit immer noch nicht mit meinem Konto verknüpft war, das neben dem Commit angezeigte Standard-Miniaturbild angezeigt wurde und nicht in meinem Beitragszeitplandiagramm angezeigt wurde, rufen Sie die Commit-URL auf und hängen Sie .patch am Ende der URL an, und überprüfen Sie den Namen und E-Mail sind korrekt.
quelle
Für diejenigen, die nur die einfache Version zum Kopieren und Einfügen benötigen (abgesehen vom Aktualisieren von E-Mails und Namen):
quelle
Die Verwendung von
git-filter-branch
ist nicht erwünscht , um dasselbe in git-filter-repo zu tun (möglicherweise müssen Sie es zuerst mit installierenpip install git-filter-repo
):Wenn das Repository original ist, ohne Remote, müssen Sie hinzufügen
--force
, um das Umschreiben zu erzwingen. (Möglicherweise möchten Sie zuvor ein Backup Ihres Repos erstellen.)Wenn Sie keine Refs beibehalten möchten (diese werden im Zweigverlauf der Git-GUI angezeigt), müssen Sie hinzufügen
--replace-refs delete-no-add
.Weitere erweiterte Funktionen finden Sie unter "Filtern von Namen und E-Mails". .
PS Gestohlen und verbessert von https://stackoverflow.com/a/59591928/714907 .
quelle