HINWEIS: Diese Antwort ändert SHA1s, seien Sie also vorsichtig, wenn Sie sie auf einem Zweig verwenden, der bereits gepusht wurde. Wenn Sie nur die Schreibweise eines Namens korrigieren oder eine alte E-Mail aktualisieren möchten, können Sie dies mit Git tun, ohne die Geschichte neu zu schreiben. .mailmap
. Siehe meine andere Antwort .
Rebase verwenden
Wenn Sie es noch nicht getan haben, sollten Sie zunächst Ihren Namen in git-config ändern:
git config --global user.name "New Author Name"
git config --global user.email "<email@address.com>"
Dies ist optional, aber es wird auch dafür sorgen, dass der Name des Committers zurückgesetzt wird, sofern Sie dies benötigen.
Um Metadaten für eine Reihe von Commits mit einem Rebase neu zu schreiben, führen Sie Folgendes aus
git rebase -r <some commit before all of your bad commits> \
--exec 'git commit --amend --no-edit --reset-author'
--exec
wird die git commit
Schritt nach jeder Übertragung neu geschrieben wird (als ob Sie git commit && git rebase --continue
wiederholt).
Wenn Sie auch Ihren ersten Commit (auch 'Root'-Commit genannt) ändern wollen, müssen Sie Folgendes hinzufügen --root
zum Aufruf von rebase.
Dadurch werden sowohl der Committer als auch der Autor in Ihre user.name
/ user.email
Konfiguration. Wenn Sie diese Konfiguration nicht ändern wollen, können Sie --author "New Author Name <email@address.com>"
anstelle von --reset-author
. Beachten Sie, dass dies zu einer no den Committer aktualisieren - nur den Autor.
Einzelverpflichtung
Wenn Sie nur den letzten Commit ändern wollen, ist ein rebase nicht notwendig. Ändern Sie einfach den Commit:
git commit --amend --no-edit --reset-author
Für ältere Git-Kunden (vor Juli 2020)
-r,--rebase-merges
gibt es für Sie vielleicht nicht. Als Ersatz können Sie Folgendes verwenden -p
. Beachten Sie, dass -p
hat ernsthafte Probleme und ist jetzt veraltet.
17 Stimmen
Frage: Bleiben bei der Verwendung von git filter-branch die SHA1-Werte für frühere Tags, Versionen und Objekte erhalten? Oder werden durch die Änderung des Autorennamens auch die zugehörigen SHA1-Sätze geändert?
0 Stimmen
Oder Sie können versuchen, mit
refs/replace/
Mechanismus.1 Stimmen
Nach der Neufassung, wenn sie ihre Arbeit nicht auf die Geschichte vor der Neufassung gestützt haben, nur
git reset --hard origin/master
oder einfachgit pull origin
(der vorspulen sollte). Wenn sie ihre Änderung als Grundlage nehmen, müssen sie eine neue Basis mitgit rebase origin/master
oder einfachgit pull --rebase origin
(die Befehle sind nur Beispiele).49 Stimmen
Hashes werden sich ändern ja
3 Stimmen
Ich habe ein kleines Skript erstellt, das die Ursache für meine Probleme beseitigt hat. gist.github.com/tripleee/16767aa4137706fd896c
0 Stimmen
@tripleee Ich finde deinen Link/deine Antwort wirklich gut, aber diese Frage ist jetzt etwa 5 Jahre alt. Dies könnte ein großartiger Q&A-Beitrag für andere Nutzer werden (beantworten Sie Ihre eigene Frage). Das wäre nützlicher, anschaulicher und sichtbarer als ein einfacher Kommentar hier.
2 Stimmen
@impinball Das Alter der Frage ist kaum relevant. Eine neue, doppelte Frage zu erstellen, kommt nicht in Frage. Ich nehme an, ich könnte eine Frage erstellen, die um diese spezielle Antwort bittet, aber ich bin nicht ganz davon überzeugt, dass sie so viel Aufmerksamkeit erhalten würde. Es ist ja nicht so, dass es hier einen Mangel an Git-Fragen gäbe... Ich freue mich jedenfalls, dass ich helfen konnte.
0 Stimmen
Diese Antwort ist viel einfacher @Flávio Amieiro stackoverflow.com/a/11768870/670229
3 Stimmen
Das github-Skript, das @TimurBernikovich erwähnt hat, ist großartig und funktioniert bei mir. Aber die github url hat sich geändert: docs.github.com/de/enterprise/2.17/user/github/using-git/
0 Stimmen
Die Antworten könnten zu viel des Guten sein. Prüfen Sie zunächst, ob dies Ihren Anwendungsfall erfüllt - stackoverflow.com/a/67363253/8293309