2016-06-30 4 views
1

Ich habe seit ein paar Monaten in einem Github-Projekt y gearbeitet und ein Haufen der Commits, die ich gemacht habe, sind mir wegen "falscher Autoreninfo" nicht zugewiesen worden.Wie Commits mit falschem Autor in git umzubenennen

Gibt es eine Möglichkeit, durch diese Commits zu fahren oder den Autor auf alle gleichzeitig zu aktualisieren? Sie sind am meisten 100 oder so.

Dank

UPDATE: habe diesen Fehler versucht, das Skript auf git bash auszuführen: Error

Und dieses auf Fenster KMD: Error 2 Hilfe anyone? Was mache ich falsch?

+0

Ich glaube, es ist nicht möglich, die Geschichte in GIT neu zu schreiben. – SiKing

+0

@SiKing Sie glauben falsch. Zugegeben, es wird normalerweise stark empfohlen, aber es ist sehr wahrscheinlich möglich und nicht einmal so schwierig. – twalberg

+0

@twalberg Hmmm, George Orwell wäre stolz. ;) – SiKing

Antwort

1

können Sie ändern Bearbeitung Autor begehen:

git commit --amend --author="John Doe <[email protected]>" 

oder interaktive Fütterungsmaterial verwenden, um mehrere Commits zu bearbeiten. Tun Sie git Rebase -i HEAD ~ 5, dann markieren Sie alle erforderlichen Commits für die Bearbeitung und wiederholen Sie sie mit korrekten Autor-Feld wie im oben genannten Single-Commit-Beispiel.

1

Sie müssen Filter-Zweig

git filter-branch --commit-filter ' 
     if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ]; 
     then 
       GIT_COMMITTER_NAME="<New Name>"; 
       GIT_AUTHOR_NAME="<New Name>"; 
       GIT_COMMITTER_EMAIL="<New Email>"; 
       GIT_AUTHOR_EMAIL="<New Email>"; 
       git commit-tree "[email protected]"; 
     else 
       git commit-tree "[email protected]"; 
     fi' HEAD ` 

verwenden Wenn Sie die NUR Benutzer sind, die zu diesem Repository begangen können Sie einfach alle Verweise aktualisieren, ohne den alten Inhalt überprüft

git filter-branch -f --env-filter ' 
    GIT_AUTHOR_NAME="Newname" 
    GIT_AUTHOR_EMAIL="newemail" 
    GIT_COMMITTER_NAME="Newname" 
    GIT_COMMITTER_EMAIL="newemail" 
    ' HEAD 
+0

Ich denke, die erste ist genau das, was ich brauche, was ich nicht laufen kann! – plicaman

1

In jedem Fall können Sie E-Mail-Adressen in mehreren Commits in einem Batch mit filter-branch ändern. Sie müssen vorsichtig sein, nur die E-Mail-Adressen zu ändern, die Ihre sind, so dass Sie verwenden --commit-filter:

$ git filter-branch --commit-filter ' 
     if [ "$GIT_AUTHOR_EMAIL" = "[email protected]" ]; 
     then 
       GIT_AUTHOR_NAME="Scott Chacon"; 
       GIT_AUTHOR_EMAIL="[email protected]"; 
       git commit-tree "[email protected]"; 
     else 
       git commit-tree "[email protected]"; 
     fi' HEAD 

Dies geht durch und schreibt jeden verpflichten Ihre neue Adresse zu haben. Da commits die SHA-1-Werte ihrer Eltern enthalten, ändert dieser Befehl jedes SHA-1-Commit in Ihrem Verlauf, nicht nur diejenigen, die die übereinstimmende E-Mail-Adresse haben.

Referenz: https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

+0

Das ist es aber mit "ungültige E-Mail-Adresse" in der IF-Anweisung rechts? – plicaman