So ändern Sie den Autor und committer name und e-mail-Adresse von mehreren commits in Git?
Ich Schreibe ein einfaches script in der Schule-computer und ein commit werden die änderungen von Git (in einem repo, das wurde in meinem USB-Stick, geklont von meinem computer zu Hause). Nach mehreren commits mir klar, ich war zu Begehen, Sachen als root-Benutzer.
Gibt es eine Möglichkeit zu ändern, die der Autor dieser verpflichtet meinen Namen?
- Frage: hat die Nutzung von git filter-branch die Erhaltung der SHA1-Hash ist zum vorherigen tags, Versionen und Objekte? Oder ändern Sie den Namen des Autors erzwingen, ändern Sie das zugehörige SHA1-wie auch?
- Oder Sie können versuchen, zu verwenden
refs/replace/
Mechanismus. - Nach umschreiben, wenn Sie nicht Ihrer Arbeit stützen sich auf die Geschichte pre-rewrite, nur
git reset --hard origin/master
oder nurgit pull origin
(das sollte schneller Vorlauf). Wenn Sie Ihre änderung, Sie haben to rebase mitgit rebase origin/master
oder nurgit pull --rebase origin
(die Befehle sind nur Beispiele). - Hashes ändern, ja
- Tangential, habe ich ein kleines Skript, welches endlich behoben, die Ursache für mich. gist.github.com/tripleee/16767aa4137706fd896c
- Ich wirklich genießen Sie Ihren link/Antwort, aber diese Frage ist über 5 Jahre alt an diesem Punkt. Dies könnte eine große Q&A-post zu machen, hier für andere Benutzer (Ihre eigene Frage zu beantworten). Es wäre nützlicher, anschaulich, und sichtbar ist als ein bloßer Kommentar hier.
- Das Alter der Frage kaum relevant ist. Erstellen eine neue doppelte Frage ist aus der Frage. Ich nehme an, dass ich schaffen könnte, eine Frage, die sich stellt dieser bestimmten Antwort, aber ich bin nicht ganz davon überzeugt, es würde bekommen alle, die viel Transparenz. Es ist nicht wie es ist ein Mangel an Git-Fragen hier... Froh, dass ich helfen konnte, sowieso.
- GitHub haben spezielle Skript: help.github.com/articles/changing-author-info
- diese Antwort ist viel einfacher, @Flávio Amieiro stackoverflow.com/a/11768870/670229
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern der Autor (oder committer) erfordern würde, das neu-schreiben der Geschichte. Wenn Sie in Ordnung sind, und denken, es lohnt sich dann Sie sollten check out git filter-branch. Die man-Seite enthält mehrere Beispiele, um Ihnen den Einstieg. Beachten Sie auch, dass Sie können Umgebungsvariablen verwenden, um ändern Sie den Namen des Autor, committer, Termine, etc. - siehe die "Umgebungsvariablen" im Abschnitt von der git-man-Seite.
Insbesondere können Sie fix alle die falsche Autorennamen und E-Mails für alle Zweige und tags mit diesem Befehl (Quelle: GitHub helfen):
git push --force --tags origin 'refs/heads/*'
erwähnt in der GitHub-docs gibt mirEverything up-to-date
git push --force --tags origin HEAD:master
git push --force --tags origin 'refs/heads/*'
übergit push -f origin master
? Ich habe beides ausprobiert, die Ergebnisse scheinen die gleichen zu sein.git update-ref -d refs/original/refs/heads/master
und prüfen Sie dann, ob.git/refs/original
Ordner-Struktur leer ist, und dann entfernen Sie es einfach mitrm -rf .git/refs/original
. Schließlich können Sie überprüfen, ob die neue umgeschrieben anmelden über:git log --pretty=format:"[%h] %cd - Committer: %cn (%ce), Author: %an (%ae)"
! Eine weitere Sache:.git/logs
hat einige log-Dateien, die noch auf Ihren alten Namen!.git/logs
ist dein reflog. Es ist wichtig und kann nicht von hand bearbeitet werden. Der einzige Weg, um loszuwerden, Ihren eigenen Namen aus, um eine neue leere repository, stellen Sie Ihre bestehenden ein, wie eine Fernbedienung, ziehen Sie in Ihre alten repo auf einen Zweig, dann Stellungswechsel, die Zweig auf das neue repo. Ich wusste nur, dass für ein sensibles Projekt, aber es ist viel zu viel Arbeit für die meisten Menschen (ich habe eine variation der beiden Antworten hier: stackoverflow.com/questions/5340790/...). Ich habe auchgit gc --aggressive
danach reinigen Sie alle auf. Viel Glück.Mit Interaktiven Rebase
Könnten Sie tun,
Dann markieren Sie alle Ihre schlechte commits als "edit" in der rebase-Datei. Wenn Sie auch möchten, ändern Sie Ihren ersten Begehen, müssen Sie manuell fügen Sie als erste Zeile in der rebase-Datei (beachten Sie das format der anderen Linien). Dann, wenn git bittet, Sie zu ändern, jedes commit, tun
Bearbeiten oder schließen Sie einfach den editor, der geöffnet wird, und dann tun
weiterhin den Stellungswechsel.
Könnten Sie überspringen, öffnen Sie den editor insgesamt hier durch anfügen
--no-edit
damit wird der Befehl:
Einzigen Commit
Wie einige Kommentatoren bemerkt haben, wenn Sie nur wollen, ändern Sie die letzten commit, wird der rebase-Befehl ist nicht notwendig. Nur tun
Dadurch ändert sich der Autor auf den Namen angegeben, aber die committer werden eingestellt, um Ihre konfigurierten Benutzer in
git config user.name
undgit config user.email
. Wenn Sie möchten, legen Sie die committer zu etwas, das Sie angeben, dies setzt sowohl den Autor und committer:Hinweis auf Merge Commits
Gab es einen leichten Fehler in meiner ursprünglichen Antwort. Wenn es eine beliebige merges zwischen den aktuellen
HEAD
und Ihre<some HEAD before all your bad commits>
, danngit rebase
wird glätten Sie (und durch die Weg, wenn Sie GitHub pull-Anforderungen, es wird eine Tonne von merge-commits in Ihrer Geschichte). Dies kann sehr oft dazu führen, dass sehr unterschiedliche Geschichte (als Duplikat änderungen "zurückgesetzt out"), und im schlimmsten Fall, kann es dazu führengit rebase
bitten Sie zu lösen, schwierig merge-Konflikten (die waren wahrscheinlich bereits gelöst in der merge-commits). Die Lösung ist die Verwendung der-p
Flagge zugit rebase
, der die Aufrechterhaltung der merge-Struktur Ihrer Geschichte. Die manpage fürgit rebase
warnt, dass die Verwendung-p
und-i
kann zu Problemen führen, aber in derBUGS
Abschnitt heißt es: "die Bearbeitung verpflichtet und Wortlaut Ihrer commit-Nachrichten sollten gut funktionieren."Habe ich
-p
zu den oben genannten Befehl. Für den Fall, wo bist du nur die änderung der letzten commit, ist dies kein Problem.git filter-branch
ist ein sehr gefährlicher Befehl. Dies sollte nur verwendet werden imho in dem seltenen Fall, wo Sie brauchen, um Informationen zu löschen, die aus der Geschichte dauerhaft (z.B. versehentlich begangen Passwort oder so).git rebase
undgit commit --amend
alsgit filter-branch
.-f .git/rebase-merge/message
🙂-f
wenn Sie drücken, wenn Sie dies tun, weil es ändert sich die Geschichte. Beachten Sie, dass diese Schraube bis jeder, der gezogen hat, in Ihren code ein. Siehe meine andere Antwort, wenn Sie wollen, eine Möglichkeit dies zu tun, ohne wechselvollen Geschichte.Additional Note
ausgeführt werden müssen, für jeden commit, deren Autor ändern müssen (irgendwie langweilig). Auch nicht ändern, der Autor des ersten commit mit Ihrer Lösung (ein problem, wenn man so blöd ist wie ich und nicht bemerken, Sie haben Globale Autor einstellen, um eine falsche E-Mail von Anfang an)--no-edit
option, es halte die Nachricht von der geänderten Fassung zu Begehen.git commit --amend --reset-author
auch mal funktioniertuser.name
unduser.email
richtig konfiguriert sind.<commit>
mituser.name
unduser.email
aus~/.gitconfig
: laufengit rebase -i <commit> --exec 'git commit --amend --reset-author --no-edit'
, speichern, beenden. Keine Bearbeiten müssen!git rebase -i --root
filter-branch
Skript von der akzeptierten Antwort, wenn Sie nicht wollen, um clobber der Metadaten.Können Sie auch tun:
Beachten Sie, wenn Sie mit diesem Befehl in der Windows-Eingabeaufforderung, dann müssen Sie
"
statt'
:"A previous backup already exists in refs/original/ Force overwriting the backup with -f"
sorry, aber wo die-f
-Flagge sein wird, whene das Skript ausgeführt wird, zwei mal. Das ist eigentlich in Brians Antwort, tut mir Leid, die Störung, die nur nach dem filter-branch ist die Lösung.filter-branch
Befehl. Schön, wenn Sie etwas falsch gemacht haben.--tag-name-filter cat
wechseln.One-liner, aber seien Sie vorsichtig, wenn Sie ein multi-user-repository - das wird sich ändern alle verpflichtet haben, die gleichen (neuen) Autor und committer.
Mit Zeilenumbrüche in den string (das ist möglich in der bash):
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; GIT_COMMITER_NAME='Newname'; GIT_COMMITTER_EMAIL='newemail';" HEAD
Sonst git wird behalten den alten Namen als committer!HEAD
am Ende des Befehls?git push --force --tags origin 'refs/heads/*'
nach dem Befehl empfohlen$git push --force --tags origin 'refs/heads/master'
Es passiert, wenn Sie nicht über eine $HOME/.gitconfig initialisiert. Sie können dieses Problem beheben, da:
getestet mit der git-version 1.7.5.4
--local
funktioniert auchgit commit --amend --reset-author --no-edit
git commit --amend --reset-author --no-edit
Befehl ist besonders nützlich, wenn Sie erstellt verpflichtet sich mit dem falschen Autor Informationen, dann setzen Sie den richtigen Autor nach-der-Tatsache übergit config
. Saved my a$$ nur wenn ich jetzt, um das update hatte meine E-Mail.Für einen einzelnen commit:
(extrahiert aus asmeurer Antwort)
git help commit
,git commit --amend
änderungen, die die Verpflichtung auf die "Spitze des aktuellen Zweiges" (der KOPF). Dies ist normalerweise die meisten aktuellen Begehen, aber Sie können es alle Begehen, die Sie möchten, indem Sie zuerst Auschecken, die Begehen mitgit checkout <branch-name>
odergit checkout <commit-SHA>
.author
und nicht diecommitter
In dem Fall, wo nur die oberen paar commits schlechte Autoren, Sie können dies tun, alle innerhalb
git rebase -i
mit derexec
Befehl und die--amend
Begehen, wie folgt:präsentiert, die Sie mit dem editierbare Liste von commits:
Dann fügen Sie
exec ... --author="..."
Zeilen, nachdem alle Zeilen mit schlechten Autoren:speichern und beenden des Editors (laufen).
Diese Lösung kann sein, mehr zu geben als andere, aber es ist sehr kontrollierbar - ich weiß genau, was begeht er trifft.
Dank @asmeurer für die inspiration.
exec git commit --amend --reset-author -C HEAD
?Someone else's commit
stattmy bad commit 1
? Ich habe gerade versuchtHEAD^^
zu ändern, die letzten 2 verpflichtet, und es funktionierte perfekt in Ordnung.git rebase -i HEAD^^^^^^
Sie können auch schreibengit rebase -i HEAD~6
Github hat eine schöne Lösung, ist das folgende shell-Skript:
git reset --hard HEAD^
ein paar mal auf die anderen lokalen repositories, um Sie zu einer früheren versiongit pull
-ed der geänderten Fassung, und hier bin ich, ohne alle Zeilen, die mitunknown <[email protected]>
(bekam zu lieben, git ' s säumigen).git push -f
. Auch lokale repos werden recloned nach dieser.Als docgnome erwähnt, die Geschichte umzuschreiben ist gefährlich und brechen anderer Leute repositories.
Aber wenn Sie wirklich wollen, zu tun, und Sie sind in eine bash-Umgebung (kein problem unter Linux, unter Windows können Sie mithilfe von git bash, die mit der installation von git), verwenden Sie git filter-branch:
Dinge zu beschleunigen, können Sie eine Reihe von Revisionen, die Sie möchten, neu zu schreiben:
--tag-name-filter cat
ist "make it work" - option.--tag-name-filter cat
. Das wirklich gewesen sein sollte das default-Verhalten.Bei der übernahme eines individuellen commit von einem anderen Autor, es gibt einen einfachen Weg, dies zu behandeln.
git commit --amend --reset-author
--no-edit
machen dies sogar noch einfacher, als in der Regel die meisten Menschen wollen, aktualisieren Sie nur die E-Mail-Adresse und nicht die commit-NachrichtKönnen Sie diese verwenden, als alias so können Sie tun:
oder für die letzten 10 commits:
Hinzufügen zu ~/.gitconfig:
Quelle: https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig
Hoffe, es ist nützlich.
Dies ist eine ausgearbeitete version von @Brian-version:
Ändern, der Autor und committer, können Sie dies tun (mit Zeilenumbrüche in der Zeichenkette, die möglich ist, in der bash):
Erhalten Sie möglicherweise eine der folgenden Fehler sein:
(dies bedeutet eine weitere filter-branch ausgeführt wurde, die zuvor auf das repository und die dann original Zweig die Referenz ist gesichert bei refs/original)
Wenn Sie erzwingen möchten, dass das laufen trotz dieser Fehler, fügen Sie die
--force
Flagge:Ein wenig Erklärung, die
-- --all
option notwendig sein könnte: Es macht die filter-branch arbeiten, auf alle Revisionen auf alle refs (einschließlich aller Niederlassungen). Das bedeutet zum Beispiel, dass tags auch umgeschrieben und ist sichtbar auf der umgeschrieben Zweige.Einem gemeinsamen "Fehler" ist die Verwendung
HEAD
statt, was bedeutet, dass die Filterung aller Revisionen, die nur auf die aktuellen Zweig. Und dann keine tags (oder anderen refs) existieren würde, in der umgeschriebenen Zweig.git rebase -i <sha1 or ref of starting point>
edit
(odere
)Schleife werden die beiden folgenden Befehle, bis Sie verarbeitet alle verpflichtet:
git commit --amend --reuse-message=HEAD --author="New Author <[email protected]>"
;
git rebase --continue
Dadurch bleiben alle anderen commit-Informationen (einschließlich der Termine).
Die
--reuse-message=HEAD
option verhindert, dass das message-editor aus starten.Verwende ich im folgenden umschreiben, die der Autor für ein ganzes repository inklusive tags und in allen Filialen:
Dann, wie beschrieben, in den MANN Seite filter-branch, entfernen Sie alle Originale refs gesichert durch
filter-branch
(das ist destruktiv, backup zuerst):--tag-name-filter cat
. Ansonsten werden Ihre tags bleiben auf der ursprünglichen Kette von commits. Die anderen Antworten ausfallen, dieses zu erwähnen.Ich angepasst diese Lösung das funktioniert durch die Einnahme einer einfachen
author-conv-file
(das format ist das gleiche wie eine für git-cvsimport). Es funktioniert, indem Sie alle Benutzer wie definiert in denauthor-conv-file
quer durch alle Branchen.Nutzten wir diese in Verbindung mit
cvs2git
migrieren Sie das repository von cvs zu git.d.h. Probe
author-conv-file
Dem Skript:
Fand ich die vorgestellten Versionen Weg, zu aggressiv, vor allem, wenn Sie commit patches von anderen Entwicklern, diese wird im wesentlichen stehlen Ihre code.
Die version unten funktioniert auf alle Zweige und verpasst dem Autor und comitter GESONDERT zu verhindern.
Großes Lob an leif81 für die option "alle".
Ändern verpflichten
author name & email
durchAmend
, dann ersetztold-commit with new-one
:Anderen Weg
Rebasing
:Sollte ich darauf hinweisen, dass, wenn das einzige problem ist, dass der Autor/E-Mail unterscheidet sich von Ihrem üblichen, dies ist nicht ein problem. Der richtige fix ist, erstellen Sie eine Datei namens
.mailmap
an der Basis des Verzeichnisses mit Zeilen wieUnd von da an Befehle wie
git shortlog
betrachten dieser beiden Namen das gleiche zu sein (es sei denn, Sie speziell sagen Sie nicht zu). Sehen http://schacon.github.com/git/git-shortlog.html für weitere Informationen.Dies hat den Vorteil, alle anderen Lösungen, dass Sie nicht haben, um die Geschichte umzuschreiben, was zu Problemen führen kann, wenn Sie haben einen upstream, und ist immer ein guter Weg, um versehentlich Daten verlieren.
Natürlich, wenn Sie verpflichtet, etwas, als sich selbst, und es sollte wirklich jemand anderes, und Sie nichts dagegen haben, die Geschichte umzuschreiben, an dieser Stelle, ändern der commit-Verfasser ist wahrscheinlich eine gute Idee für die Zuteilung Zwecke (in dem Fall ich direkt zu meiner anderen Antwort hier).
Angenommen, Sie möchten, ändern Sie den Autor für die letzten N commits:
HINWEISE
--no-edit
flag stellt sicher, dass diegit commit --amend
Fragen nicht eine zusätzliche Bestätigunggit rebase -i
können Sie manuell wählen Sie den commit-wo ändern Sie den Autor,die Datei, die Sie Bearbeiten wird wie folgt Aussehen:
Können Sie dann noch ändern, einige Linien zu sehen, wo Sie ändern möchten den Autor. Dies gibt Ihnen einen schönen Mittelweg zwischen Automatisierung und Kontrolle: sehen Sie die Schritte, die ausgeführt werden, und sobald Sie speichern Sie alles auf einmal übernommen.
Wenn Sie der einzige Benutzer dieses Repositorys können Sie die Geschichte umzuschreiben entweder
git filter-branch
(wie svick schrieb), odergit fast-export
/git-fast-import
plus filter-Skript (wie im Artikel beschrieben auf die in docgnome Antwort), oder interaktive Stellungswechsel. Aber entweder dieser würde sich ändern, änderungen von vorher geändert commit ab; das bedeutet ärger für jeden, der seine/Ihre änderungen auf Ihrem Zweig pre-rewrite.RECOVERY
Wenn andere Entwickler nicht die Basis Ihrer Arbeit auf die vor-rewrite-version, die einfachste Lösung wäre die re-Klon (Klon wieder).
Alternativ können Sie versuchen
git rebase --pull
würde, was Vorspulen, wenn es gab keine Veränderungen in Ihrem repository, oder rebase Ihre Niederlassung auf dem oben neu geschrieben begeht (wir wollen vermeiden, verschmelzen, als würde es halten, pre-rewrite comits für immer). All dies vorausgesetzt, dass Sie nicht haben, nicht übergebene arbeiten; verwenden Siegit stash
auf stash away Veränderungen sonst.Wenn andere Entwickler verwenden Sie die feature-Zweige und/oder
git pull --rebase
nicht funktioniert, z.B. weil der upstream nicht eingerichtet ist, müssen Sie Stellungswechsel Ihre Arbeit auf der post-rewrite verpflichtet. Zum Beispiel gleich nach dem Holen von neuen änderungen (git fetch
), für einemaster
Zweig basiert auf /Gabel ausorigin/master
man ausführen muss, umHier
origin/master@{1}
ist pre-rewrite Zustand (vor Holen), siehe gitrevisions.Alternative Lösung wäre die Verwendung refs/ersetzen/ - Mechanismus, verfügbar in Git seit der version 1.6.5. In dieser Lösung, die Sie bieten Ersatz für verpflichtet, die E-Mail falsch; dann wer holt 'ersetzen' refs (so etwas wie
fetch = +refs/replace/*:refs/replace/*
refspec an entsprechender Stelle in Ihre.git/config
) bekommen würde Ersatz transparent, und diejenigen, die nicht Holen diejenigen, die refs sehen würde alte verpflichtet.Dem Verfahren geht so etwas wie dieses:
Finden Sie alle commits mit falschen E-Mails, zum Beispiel mit
Für jedes Unrecht Begehen, erstellen Sie einen Ersatz verpflichten, und fügen Sie es auf die Objekt-Datenbank
Nun, dass Sie behoben haben, Begehen Sie im Objekt-Datenbank, die Sie haben, um zu sagen git automatisch und transparent ersetzen, Unrecht zu Begehen, indem korrigiert man mit
git ersetzen
Befehl:Schließlich Liste mit allen Ersatz -, um zu überprüfen, ob dieser Vorgang erfolgreich
und überprüfen Sie, ob Ersetzungen stattfinden
Können Sie natürlich die Automatisierung dieser Prozedur... naja, alle außer mit
git replace
welches nicht (noch) batch-Modus, so dass Sie verwenden würde shell-Schleife für das, oder ersetzen Sie "von hand".NICHT GETESTET! YMMV.
Beachten Sie, dass Sie möglicherweise Probleme mit einigen groben Ecken bei Verwendung von
refs/replace/
Mechanismus: es ist neu und noch nicht sehr gut getestet.Wenn die commits, die Sie korrigieren möchten, sind die letzten, und nur ein paar von Ihnen, können Sie eine Kombination von
git reset
undgit stash
zurück zu gehen, ein Begehen Sie wieder nach der Konfiguration der richtigen Namen und E-Mail.Die Sequenz wird so etwas (für 2 falschen verpflichtet, keine ausstehenden änderungen):
Wenn Sie Eclipse mit EGit, dann gibt es eine ganz einfache Lösung.
Annahme: Sie haben sich verpflichtet, in einem lokalen Zweig 'local_master_user_x', die nicht geschoben werden, um eine remote-branch 'master' ist wegen Ungültiger Benutzer.
Mithilfe von interaktiven rebase, Sie können eine änderung Befehl nach jedem commit, die Sie ändern wollen. Zum Beispiel:
;-)
.Beachten Sie, dass git speichert zwei verschiedenen e-mail-Adressen, eine für die committer (die person, die verpflichtet, das zu ändern) und eine weitere für die Autor (die person, die schrieb das ändern).
Den committer-information nicht angezeigt, in den meisten Orten, aber Sie können es mit
git log -1 --format=%cn,%ce
(oder verwenden Sieshow
stattlog
wenn Sie eine bestimmte commit).Beim ändern der Urheber des letzten commit ist so einfach wie
git commit --amend --author "Author Name <[email protected]>"
, es gibt keine one-liner oder-argument, das gleiche zu tun, um die committer Informationen.Die Lösung (vorübergehend oder nicht) ändern Sie Ihre Benutzerdaten ein, dann ändern Sie die verpflichten, die Aktualisierung der committer, um Ihre aktuellen Informationen:
path\to\repo\.git
. Ich bin mir noch nicht sicher, was Sie würde tun müssen, um zu Pressen, es völlig. Ändert leider (?) scheinen nicht zu löschen.Wir haben erlebt, dass ein Problem heute, wo utf-8-Zeichen in Namen eines Autors war, die Probleme auf dem server zu bauen, so hatten wir, zu schreiben, die Geschichte zu korrigieren. Die Schritte waren:
Schritt 1: Ändern Sie Ihren Benutzernamen git für alle Zukunft verpflichtet, gemäß den Anweisungen hier:
https://help.github.com/articles/setting-your-username-in-git/
Schritt 2: Führen Sie das folgende bash-Skript:
Schnellen überblick: Checkout repository, um eine temp-Datei, Check-out alle remote-Niederlassungen, führen Sie das Skript, die umschreiben der Geschichte, Mach ein force-push des neuen Staates, und sagen, alle Ihre Kolleginnen und Kollegen auf einen Stellungswechsel ziehen, um die änderungen.
Hatten wir Schwierigkeiten mit der Ausführung dieses auf OS X, weil es irgendwie versaut Zeilenenden in commit-Nachrichten, also mussten wir wieder laufen, es auf einem Linux-Rechner hinterher.
Dein problem ist wirklich sehr Häufig. Siehe "Mit Mailmap zu Beheben Autoren Liste in Git"
Der Einfachheit halber, habe ich ein Skript erstellt um die Prozesse zu vereinfachen: git-changemail
Nachdem Sie das Skript auf Ihrem Pfad befindet, können Sie Befehle wie:
Ändern Autor übereinstimmungen auf aktuellen Zweig
Ändern Autor und committer übereinstimmungen auf <branch> und <branch2>. Pass
-f
zu filter-branch zu ermöglichen umschreiben sicherungenZeigen bestehende Benutzer auf das repo -
Durch die Art und Weise, nachdem Sie Ihre änderungen, reinigen Sie die Sicherung aus dem filter-branch mit: git-backup-sauber
Der Schnellste, einfachste Weg, dies zu tun ist die Verwendung der --exec argument von git rebase:
Dadurch wird eine todo-Liste, die wie folgt aussieht:
und dies funktioniert alles automatisch, die funktioniert, wenn Sie haben Hunderte von commits.
Wenn Sie der einzige Benutzer dieses repo oder Sie kümmern sich nicht darum, möglicherweise brechen die repo für andere user, dann ja. Wenn Sie haben, brachte diese begeht und Sie bestehen dort, wo irgendwo sonst auf Sie zugreifen kann, dann Nein, es sei denn, Sie kümmern sich nicht um das brechen anderer Leute repos. Das problem wird durch das ändern dieser verpflichtet Sie generieren neue SHAs die bewirken, dass Sie so behandelt werden, als andere verpflichtet. Wenn jemand anderes versucht, Sie ziehen diese veränderten verpflichtet, die Geschichte ist anders und kaboom.
Dieser Seite http://inputvalidation.blogspot.com/2008/08/how-to-change-git-commit-author.html beschreibt, wie es zu tun. (Ich habe nicht versucht, diese so YMMV)
refs/replace/
Mechanismus.Möchte ich hinzufügen, dass mein Beispiel auch.
Ich will erstellen Sie eine bash_function mit den angegebenen parameter.
diese arbeiten in mint-linux-17.3
Drücken ^C # nach dem rebase gemacht wird (der loop wird ständig aktualisiert Letzte commit)
Ausprobieren. Es wird das gleiche tun, wie oben erwähnt, ist aber interaktiv.
Referenz: https://github.com/majdarbash/git-author-change-script
Dies ist nicht die Antwort auf deine Frage, sondern ein Skript, das Sie verwenden können, um dies zu vermeiden in der Zukunft. Es nutzt Globale hooks zur Verfügung, da Git version 2.9, um zu überprüfen Ihre E-Mail-Konfiguration auf das Verzeichnis Ihrer in:
Er überprüft, ob der aktuelle Arbeitsverzeichnis, dann prüft git konfiguriert ist, um die richtige E-Mail. Wenn nicht, es ändert sich automatisch. Die vollständigen details hier.