Wie kann man den Autor eines Commits für ein bestimmtes Commit ändern?

Ich möchte den Autor eines bestimmten Commits in der Geschichte ändern. Dies ist nicht das letzte Commit.

Ich weiß von dieser Frage - wie kann ich den Autor eines Commits in git ändern?

Aber ich denke über etwas nach, bei dem ich ein Commit durch Hash oder Short Hash identifiziere.

1564
15 июня '10 в 7:00 2010-06-15 07:00 MicTech am 15. Juni 2010 um 7:00 Uhr am 06.06.2010 um 07:00 Uhr eingestellt
@ 9 Antworten

Interaktive Erneuerung ab einem früheren Punkt in der Historie als das zu git rebase -i <earliercommit> Commit ( git rebase -i <earliercommit> ). Ändern Sie in der Liste der Commits, die verschoben wurden, den Text von pick zum edit neben dem Hash des zu edit Commits. Wenn Sie von git aufgefordert werden, das Commit zu ändern, verwenden Sie Folgendes:

 git commit --amend --author="Author Name <email@address.com>" 

Wenn Ihre ABCDE-f Commit-Historie mit F HEAD ist und Sie den Autor von C und D ändern möchten, würden Sie ...

  1. git rebase -i B ( hier sehen Sie ein Beispiel dafür, was Sie nach dem Ausführen des git rebase -i B )
    • Wenn Sie A bearbeiten müssen, verwenden Sie git rebase -i --root
  2. Ändern Sie die Zeilen für C und D von pick zum edit
  3. Sobald die Rebase beginnt, stoppt er zuerst bei C
  4. Sie müssen git commit --amend --author="Author Name <email@address.com>" tun git commit --amend --author="Author Name <email@address.com>"
  5. Dann git rebase --continue
  6. Dies wird wieder bei D
  7. Dann müssen Sie erneut git commit --amend --author="Author Name <email@address.com>"
  8. git rebase --continue
  9. Der Umzug wird abgeschlossen.
  10. Verwenden Sie git push -f , um Ihre Quelle mit aktualisierten Commits zu aktualisieren.
2672
15 июня '10 в 7:31 2010-06-15 07:31 Die Antwort wurde Amber 15. Juni 10 um 07:31 2010-06-15 07:31 gegeben

Die akzeptierte Antwort auf diese Frage ist die überraschend clevere Anwendung der interaktiven Umsiedlung, die jedoch zu Konflikten führt, wenn der Autor, den wir ändern möchten, vom Autor für den später zusammengeführten Zweig verwendet wird. Im allgemeinen Fall funktioniert dies nicht bei der Verarbeitung von Dirty Stories.

Da ich Angst habe, Skripts auszuführen, die davon abhängig sind, dass Umgebungsvariablen gesetzt und zurückgesetzt werden, um die git-Historie zu überschreiben, schreibe ich eine neue Antwort, die auf diesem Beitrag basiert. Diese Antwort ähnelt dieser Antwort, ist jedoch vollständiger.

Folgendes wird getestet und funktioniert im Gegensatz zur zugehörigen Antwort. Nehmen wir zur Klarheit an, dass 03f482d6 ein Commit ist, dessen Autor wir zu ersetzen versuchen, und 42627abe ein Commit mit einem neuen Autor ist.

border=0
  1. Machen Sie ein Commit, das wir zu ändern versuchen.

     git checkout 03f482d6 
  2. Ändern Sie den Autor.

     git commit --amend --author "New Author Name <New Author Email>" 

    Jetzt haben wir ein neues Commit mit einem Hash von 42627abe .

  3. Überprüfen Sie den ursprünglichen Zweig.

  4. Ersetzen Sie das alte Commit lokal durch ein neues.

     git replace 03f482d6 42627abe 
  5. Alle zukünftigen Commits basierend auf Ersetzung neu schreiben.

     git filter-branch -- --all 
  6. Entfernen Sie den Reiniger.

     git replace -d 03f482d6 
  7. Klicken Sie auf den neuen Verlauf (verwenden Sie nur --force, wenn Folgendes fehlschlägt, und nachdem die Funktionalität mit git log und / oder git diff getestet wurde).

     git push --force-with-lease 

Anstelle von 4-6 können Sie einfach zum neuen Commit wechseln:

 git rebase -i 42627abe 
369
04 марта '15 в 5:11 2015-03-04 05:11 Die Antwort wird gegeben merlin2011 4. März 15 um 5:11 2015-03-04 05:11
09 июня '15 в 19:02 2015-06-09 19:02 Antwort wird von olivieradam666 09. Juni 15 um 19:02 2015-06-09 19:02 gegeben
  • Setzen Sie Ihre E-Mail-Adresse in der Konfiguration zurück:

    git config --global user.email example@email.com

  • Setzen Sie den Autor Ihres Commits jetzt zurück, ohne ihn zu bearbeiten:

    git commit --amend --reset-author --no-edit

82
05 апр. die antwort wird pravbeatle gegeben 05 apr 2017-04-05 15:44 '17 um 15:44 Uhr 2017-04-05 15:44

Sie können den Autor des letzten Commits mit dem folgenden Befehl ändern.

git commit --amend --author="Author Name <email@address.com>"

Wenn Sie jedoch mehr als einen Autorennamen ändern möchten, ist dies etwas schwierig. Sie müssen eine interaktive Neuinstallation starten, Commits als korrekt markieren, sie dann einzeln ändern und beenden.

Starten Sie den Neustart mit git rebase -i . Er wird dir so etwas zeigen.

Ändern Sie das Auswahlschlüsselwort zur edit für die Commits, die Sie den Namen des Autors ändern möchten.

Schließen Sie dann den Editor. Für :wq drücken Enter Escape :wq und geben dann :wq und drücken Sie die Enter .

Dann sehen Sie Ihr Terminal, als ob nichts passiert wäre. Sie befinden sich tatsächlich mitten in einer interaktiven Permutation. Nun ist es Zeit, den Namen des Autors mit dem obigen Befehl zu ändern. Er wird den Editor erneut öffnen. Schließen Sie den Neustart mit git rebase --continue . Wiederholen Sie dasselbe für die Menge an Fix, die Sie bearbeiten möchten. Können Sie sicherstellen, dass die interaktive Zusammenfassung beendet ist, als Sie die Meldung No rebase in progress? .

69
29 авг. Die Antwort wird von Fatih 29 Aug gegeben. 2015-08-29 03:52 '15 am 3:52 2015-08-29 03:52

Antworten auf die Frage, mit der Sie verbunden sind, sind gute Antworten und decken Ihre Situation ab (eine andere Frage ist allgemeiner Art, da mehrere Commits neu geschrieben werden).

Als Vorwand für das Abfragen von git filter-branch ich ein Skript geschrieben, um den Namen des Autors und / oder die E-Mail-Adresse des Autors für dieses Commit neu zu schreiben:

15 июня '10 в 8:24 2010-06-15 08:24 Antwort von Chris Johnsen am 15. Juni 10 um 08:24 2010-06-15 08:24

Beim Ausführen von git rebase -i gibt es dieses interessante Bit im Dokument:

Wenn Sie zwei oder mehr Commits auf einen Commit zurücksetzen möchten, ersetzen Sie den Befehl "pick" durch einen zweiten und nachfolgenden Commit durch "squash" oder "fixup" . Wenn die Commits unterschiedliche Autoren hatten, wird der gefaltete Fixer dem Autor des ersten Commits zugeordnet. Die vorgeschlagene Festschreibungsnachricht für ein gefaltetes Festschreiben ist eine Verkettung der "fixup" des ersten "fixup" und der Befehle mit dem "squash" Befehl, lässt jedoch die "fixup" mit dem "fixup" .

  • Wenn Sie eine Geschichte ABCDEF ,
  • und Sie möchten die Commits B und D ändern (= 2 Commits),

dann kannst du tun:

  • git config user.name "Correct new name"
  • git config user.email "correct@new.email"
  • Erstellen Sie leere Commits (eine für jedes Commit):
    • Sie benötigen eine Nachricht zum Weiterleiten
    • git commit --allow-empty -m "empty"
  • Starten Sie den Neustart
    • git rebase -i B^
    • B^ wählt das übergeordnete Element B
  • Sie müssen zuvor ein leeres Commit eingeben, damit jedes Commit geändert wird
  • Sie müssen die pick ändern, pick zu squash .

Ein Beispiel dafür, was git rebase -i B^ Ihnen geben wird:

 pick sha-commit-B some message pick sha-commit-C some message pick sha-commit-D some message pick sha-commit-E some message pick sha-commit-F some message # pick sha-commit-empty1 empty # pick sha-commit-empty2 empty 

Ändern Sie es in:

 # change commit B author pick sha-commit-empty1 empty squash sha-commit-B some message # leave commit C alone pick sha-commit-C some message # change commit D author pick sha-commit-empty2 empty squash sha-commit-D some message # leave commit EF alone pick sha-commit-E some message pick sha-commit-F some message 

Er wird Sie bitten, die Nachrichten zu bearbeiten:

 # This is a combination of 2 commits. # The first commit message is: empty # This is the 2nd commit message: ...some useful commit message there... 

und Sie können nur die ersten Zeilen löschen.

12
28 авг. Die Antwort wird am 28. August gegeben . 2013-08-28 04:03 '13 am 4:03 2013-08-28 04:03

Wenn Sie ein zentrales Repository verwenden, müssen Sie die Amber-Antwort um einen weiteren Schritt erweitern:

git push -f , um die Aktualisierung eines zentralen Repositorys zu erzwingen.

Achten Sie darauf, nicht viele Leute in einer Branche zu haben, da dies zu einem Konsistenzverlust führen kann.

11
20 дек. Die Antwort wird von Fabian76 20 Dez. gegeben. 2013-12-20 18:06 13 am 18:06 2013-12-20 18:06

Fix vor:

2019

30 июня '18 в 15:16 2018-06-30 15:16 Die Antwort gibt Eugen Konkov am 30. Juni 1818 um 15:16 Uhr 2018-06-30 15:16

Weitere Fragen zu Tags oder Frage stellen