Wie ändere ich den Commit-Autor für ein bestimmtes Commit?

Antworten:

3566

Interaktives Rebase von einem Punkt früher im Verlauf als dem Commit, den Sie ändern müssen ( git rebase -i <earliercommit>). In der Liste der Commits indexiert wird, ändern Sie den Text aus , pickum editneben dem Hash - Wert des von Ihnen ändern möchten. Wenn git Sie dann auffordert, das Commit zu ändern, verwenden Sie Folgendes:

git commit --amend --author="Author Name <[email protected]>" --no-edit

Wenn Ihr Commit-Verlauf beispielsweise A-B-C-D-E-Fmit Fas HEADist und Sie den Autor von Cund ändern möchten, Dwürden Sie ...

  1. Geben Sie an git rebase -i B( hier ist ein Beispiel dafür, was Sie nach der Ausführung des git rebase -i BBefehls sehen werden ).
    • Wenn Sie bearbeiten müssen A, verwenden Siegit rebase -i --root
  2. Ändern Sie die Zeilen für beide Cund Dvon pickbisedit
  3. Beenden Sie den Editor (für vim würde dies Esc drücken und dann tippen :wq).
  4. Sobald die Rebase gestartet wurde, wurde sie zuerst um angehalten C
  5. Du würdest git commit --amend --author="Author Name <[email protected]>"
  6. Dann git rebase --continue
  7. Es würde wieder um pausieren D
  8. Dann würdest du git commit --amend --author="Author Name <[email protected]>"wieder
  9. git rebase --continue
  10. Die Rebase würde abgeschlossen sein.
  11. Verwenden Sie git push -fdiese Option, um Ihren Ursprung mit den aktualisierten Commits zu aktualisieren.
Bernstein
quelle
90
Gute Antwort, aber für Anfänger: Finden Sie zuerst ein Commit vor dem, das Sie ändern möchten, und führen Sie es dann ausgit rebase -i <commit>
Mathew Byrne
47
Wenn Sie nicht wissen, in welchem ​​Editor Sie sich befinden, ist die Antwort wahrscheinlich vim. Geben Sie zum Speichern und Beenden Esc: wq Enter ein. Wenn es sich dagegen um Nano handelt und Sie unten Dinge wie "WriteOut: ^ O" sehen, sollten Sie stattdessen Strg + O, Enter, Strg + X verwenden.
Amber
30
Was ist, wenn Sie das allererste Commit ändern möchten? Was ist dann der vorherige Commit-Hash?
Brenden
219
Verwenden Sie --no-editOption. git commit --amend --reset-author --no-editöffnet keinen Editor. Verfügbar seit Git 1.7.9.
5lava
51
@Brenden, um das allererste Commit im Projekt zu ändern, verwenden Siegit rebase -i --root
Noah Passalacqua
488

Die akzeptierte Antwort auf diese Frage ist eine wunderbar clevere Verwendung der interaktiven Rebase, die jedoch leider zu Konflikten führt, wenn sich das Commit, von dem wir versuchen, den Autor zu ändern, in einem Zweig befand, der später zusammengeführt wurde. Im Allgemeinen funktioniert es nicht beim Umgang mit unordentlichen Geschichten.

Da ich besorgt bin, Skripte auszuführen, die vom Festlegen und Deaktivieren von Umgebungsvariablen abhängen, um den Git-Verlauf neu zu schreiben, schreibe ich basierend auf diesem Beitrag eine neue Antwort, die dieser Antwort ähnelt, aber vollständiger ist.

Im Gegensatz zur verknüpften Antwort wird Folgendes getestet und funktioniert. Nehmen Sie zur Klarheit der Darstellung an, dass 03f482d6es sich um das Commit handelt, dessen Autor wir ersetzen möchten, und 42627abeum das Commit mit dem neuen Autor.

  1. Überprüfen Sie das Commit, das wir ändern möchten.

    git checkout 03f482d6
    
  2. Nehmen Sie den Autorwechsel vor.

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

    Jetzt haben wir ein neues Commit mit angenommenem Hash 42627abe.

  3. Kasse der ursprünglichen Filiale.

  4. Ersetzen Sie das alte Commit lokal durch das neue.

    git replace 03f482d6 42627abe
    
  5. Schreiben Sie alle zukünftigen Commits basierend auf dem Ersatz neu.

    git filter-branch -- --all
    
  6. Entfernen Sie den Ersatz für die Sauberkeit.

    git replace -d 03f482d6
    
  7. Übertragen Sie den neuen Verlauf (verwenden Sie --force nur, wenn das Folgende fehlschlägt, und erst nach Überprüfung der Integrität mit git logund / oder git diff).

    git push --force-with-lease
    

Anstelle von 4-6 können Sie einfach auf ein neues Commit zurückgreifen:

git rebase -i 42627abe
merlin2011
quelle
9
Bitte geben Sie dort eine Notiz ein, um Ihre ursprüngliche Filiale nach Schritt 2 erneut
Benjamin Riggs
42
Dies sieht eine klare Alternative zum Schrecklichen aus git rebase -i. Noch nie davon gehört git replace. +1
FractalSpace
3
Für die Reinigung der Refs / Original / ... Backup siehe hier
Alexis
5
Ich empfehle --force-with-leaseanstelle von -f. Es ist sicherer.
Jay Bazuzi
11
WARNUNG: Beachten Sie, dass git filter-branch -- --allCommits in allen Zweigen geändert werden, in denen sich das ursprüngliche Commit befand. Wenn Sie nicht über genügend Anmeldeinformationen verfügen (oder den Verlauf anderer Zweige einfach nicht ändern möchten), sollten Sie mit dieser Antwort vorsichtig sein.
Ribamar
225

Die Github-Dokumentation enthält ein Skript, das die Committer-Informationen für alle Commits in einem Zweig ersetzt .

  • Führen Sie das folgende Skript vom Terminal aus, nachdem Sie die Variablenwerte geändert haben

    #!/bin/sh
    
    git filter-branch --env-filter '
    
    OLD_EMAIL="[email protected]"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="[email protected]"
    
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
        export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
        export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    
  • Übertragen Sie den korrigierten Verlauf an GitHub:

    git push --force --tags origin 'refs/heads/*'
    

    ODER wenn Sie ausgewählte Referenzen der Zweige verschieben möchten, verwenden Sie

    git push --force --tags origin 'refs/heads/develop'
    
olivieradam666
quelle
12
Dies ändert es in allen Commits, nicht nur in einem. Lustige Sache, ich habe das vor weniger als 30 Minuten gemacht.
Artjom B.
Als ich diese Antwort fand, nachdem ich die vorherigen gelesen hatte, dachte ich, dass es sich lohnt, es zu versuchen, und voila, es hat den Job gemacht. In meinem Fall wurde der Name des Committers jedoch nur beim ersten Commit geändert. Übrigens, bevor ich Ideen aus der ersten Antwort ausprobiert habe. Vielleicht hat es das System irgendwie beeinflusst.
Ruslan Gerasimov
2
Beachten Sie, dass Sie einen Sicherungs-Namespace erhalten , wenn Sie die Verwendung von clone/ vermeiden . Ich konnte keinen Weg finden, diesen Namespace intelligent zu entfernen, und löschte schließlich das Verzeichnis , was funktionierte. pushrefs/original/.git/refs/original
VasiliNovikov
Warum führt dies zu Änderungen am Repo, wenn zB OLD_EMAIL mit nichts übereinstimmt? Aus irgendeinem Grund ändern sich einige (aber nicht alle!) Hashes.
mjs
1
Mein Anwendungsfall für diese Antwort lautet: Ich habe zwei Github-Konten, von denen ich eines unbeabsichtigt zum Festschreiben verwendet habe. Dieses Skript half dabei, alle meine Commits zu korrigieren, indem die falschen Committer-E-Mails / Namen umbenannt wurden. Wenn ich mit dem falschen Benutzer von beispielsweise 50 bis 500 festgeschrieben habe, gibt es natürlich 450 unterschiedliche Festschreibungen. Wie auch immer, nachdem Sie das Skript ausgeführt haben, müssen Sie, wie @andrej hervorhob, git push -fPush-Änderungen am Repo erzwingen.
LWY
168
  • Setzen Sie Ihre E-Mail global auf die Konfiguration zurück:

    git config --global user.email [email protected]

  • Setzen Sie nun den Autor Ihres Commits zurück, ohne dass eine Bearbeitung erforderlich ist:

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

Pravbeatle
quelle
2
Nein, ist es nicht. Schauen Sie sich das OP an: It's not last commit.Wie würden sie amendes also tun?
underscore_d
2
Das ist großartig, aber es ist eine Schande, dass es nur das letzte Commit ist. Ich brauchte es zum Glück bei den letzten beiden, also habe ich einfach a ausgeführt git reset HEAD~, Ihre vorgeschlagenen Zeilen ausgeführt und dann das nächste Commit erneut manuell ausgeführt. Hat gut funktioniert!
Matt Fletcher
2
Vielen Dank! Der --reset-Autor hat den Trick für mich gemacht, da sich der Autor ohne ihn ändert, der "Commiter" jedoch bei den alten Autorendetails bleibt.
Lucas P.
9
So beheben Sie meine letzten sechs Commits: Stellen Sie zuerst mit git config --local user.name FirstName LastName und den richtigen Autor für das aktuelle Git-Repo ein git config --local user.email [email protected]. Dann bewerben Sie sich mit den letzten sechs Commits git rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6. Schieben Sie es schließlich auf Remote-Git-Repo mit git push --force-with-lease.
Olibre
@olibre es funktioniert wie ein Zauber, danke.
Bruno Gasparotto
88

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

git commit --amend --author="Author Name <[email protected]>"

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

Starten Sie mit git rebase -i. Es wird Ihnen so etwas zeigen.

https://monosnap.com/file/G7sdn66k7JWpT91uiOUAQWMhPrMQVT.png

Ändern Sie das pickSchlüsselwort in editfür die Commits , für die Sie den Autorennamen ändern möchten.

https://monosnap.com/file/dsq0AfopQMVskBNknz6GZZwlWGVwWU.png

Schließen Sie dann den Editor. Für die Anfänger drücken, Escapedann tippen :wqund drücken Enter.

Dann sehen Sie Ihr Terminal, als wäre nichts passiert. Eigentlich befinden Sie sich mitten in einer interaktiven Rebase. Jetzt ist es Zeit, den Autorennamen Ihres Commits mit dem obigen Befehl zu ändern. Der Editor wird erneut geöffnet. Beenden Sie und fahren Sie mit Rebase fort git rebase --continue. Wiederholen Sie dies für die Anzahl der Festschreibungen, die Sie bearbeiten möchten. Sie können sicherstellen, dass die interaktive Wiederherstellung abgeschlossen ist, wenn Sie die No rebase in progress?Nachricht erhalten.

Fatih Acet
quelle
Können Sie bitte Ihre Bilder aktualisieren?
Shimmy Weitzhandler
1
Wenn Sie mehrere Commits ändern müssen, anstatt sie einzeln zu bearbeiten, können Sie die pickAktion auch zulassen und nach jeder Zeile hinzufügenexec git commit --no-edit --amend --author="MyNewAuthor <[email protected]>"
Pierre-Olivier Vares
60

Die Antworten in der Frage, auf die Sie verlinkt haben, sind gute Antworten und decken Ihre Situation ab (die andere Frage ist allgemeiner, da mehrere Commits neu geschrieben werden müssen).

Als Ausrede zum Ausprobieren habe git filter-branchich ein Skript geschrieben, um den Autorennamen und / oder die Autoren-E-Mail für ein bestimmtes Commit neu zu schreiben:

#!/bin/sh

#
# Change the author name and/or email of a single commit.
#
# change-author [-f] commit-to-change [branch-to-rewrite [new-name [new-email]]]
#
#     If -f is supplied it is passed to "git filter-branch".
#
#     If <branch-to-rewrite> is not provided or is empty HEAD will be used.
#     Use "--all" or a space separated list (e.g. "master next") to rewrite
#     multiple branches.
#
#     If <new-name> (or <new-email>) is not provided or is empty, the normal
#     user.name (user.email) Git configuration value will be used.
#

force=''
if test "x$1" = "x-f"; then
    force='-f'
    shift
fi

die() {
    printf '%s\n' "$@"
    exit 128
}
targ="$(git rev-parse --verify "$1" 2>/dev/null)" || die "$1 is not a commit"
br="${2:-HEAD}"

TARG_COMMIT="$targ"
TARG_NAME="${3-}"
TARG_EMAIL="${4-}"
export TARG_COMMIT TARG_NAME TARG_EMAIL

filt='

    if test "$GIT_COMMIT" = "$TARG_COMMIT"; then
        if test -n "$TARG_EMAIL"; then
            GIT_AUTHOR_EMAIL="$TARG_EMAIL"
            export GIT_AUTHOR_EMAIL
        else
            unset GIT_AUTHOR_EMAIL
        fi
        if test -n "$TARG_NAME"; then
            GIT_AUTHOR_NAME="$TARG_NAME"
            export GIT_AUTHOR_NAME
        else
            unset GIT_AUTHOR_NAME
        fi
    fi

'

git filter-branch $force --env-filter "$filt" -- $br
Chris Johnsen
quelle
+1 danke. assembla.com git repo scheint nicht alle Autorenreferenzen in der Webansicht des Repos zu ändern, aber die Ergebnisse von 'git pull / clone' scheinen für alle in Ordnung zu sein.
Johnny Utahh
Tolle Lösung, da nur das geändert wird, was beabsichtigt ist, und nicht andere Felder wie das Festschreibungsdatum.
Guillaume Lemaître
12
Github Dokumentation enthält ein ähnliches Skript
olivieradam666
2
@ Olivieradam666, die wie ein Zauber funktioniert und einfacher zu lesen ist
Fregante
@ olivieradam666 Vielen Dank. Sie sollten das wirklich als Antwort hinzufügen, damit es mehr Aufmerksamkeit erhält.
Seane
44

Commit vor:

Geben Sie hier die Bildbeschreibung ein

Um den Autor für alle Commits festzulegen, können Sie den Befehl aus der Antwort von @ Amber anwenden:

git commit --amend --author="Author Name <[email protected]>"

Oder um Ihren Namen und Ihre E-Mail-Adresse wiederzuverwenden, können Sie einfach schreiben:

git commit --amend --author=Eugen

Commit nach dem Befehl:

Geben Sie hier die Bildbeschreibung ein

Zum Beispiel, um alle ab zu ändern 4025621:

Geben Sie hier die Bildbeschreibung ein

Du musst rennen:

git rebase --onto 4025621 --exec "git commit --amend --author=Eugen" 4025621

Hinweis: Um einen Autor einzuschließen, der Leerzeichen wie einen Namen und eine E-Mail-Adresse enthält, muss der Autor von Anführungszeichen umgeben sein. Zum Beispiel:

git rebase --onto 4025621 --exec "git commit --amend --author=\"Foo Bar <[email protected]>\"" 4025621

oder fügen Sie diesen Alias ​​hinzu in ~/.gitconfig:

[alias]
    reauthor = !bash -c 'git rebase --onto $1 --exec \"git commit --amend --author=$2\" $1' --

Und dann laufen:

git reauthor 4025621 Eugen
Eugen Konkov
quelle
1
Um zu überprüfen, ob der Befehl wie erwartet funktioniert hat, habe ich die Ausgabe von überprüft git shortlog -e -s.
Taylor Edmiston
5
Dies ist die Antwort, die meinen Zwecken am besten diente, danke. Und da ich nur meine E-Mail-Adresse anpassen wollte , konnte ich nach dem Aktualisieren meiner .git / config mit --exec = "git commit --amend --reset-author" ausführen.
Dato
1
Ich bin mir nicht sicher, warum ich es vergessen habe! Jetzt fertig.
Dato
Tolle Antwort und sehr einfach zu beheben. Ich liebe den Alias!
J_A_X
das hat mir nicht geholfen. Jetzt habe ich den Fehler " Rebase fehlgeschlagen" fortgesetzt
Alexey Sh.
17

Wenn Sie ein zentrales Repository verwenden, gibt es einen zusätzlichen Schritt zu Bernsteins Antwort :

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

Achten Sie darauf, dass nicht viele Leute an demselben Zweig arbeiten, da dies die Konsistenz beeinträchtigen kann.

Fabian76
quelle
16

Wenn Sie dies tun, git rebase -igibt es dieses interessante Stück im Dokument:

Wenn Sie zwei oder mehr Commits zu einem zusammenfassen möchten, ersetzen Sie den Befehl "pick"für das zweite und die nachfolgenden Commits durch "squash"oder "fixup". Wenn die Commits unterschiedliche Autoren hatten, wird das gefaltete Commit dem Autor des ersten Commits zugeordnet. Die vorgeschlagene Festschreibungsnachricht für das gefaltete Festschreiben ist die Verkettung der Festschreibungsnachrichten des ersten Festschreibens und derjenigen mit dem "squash"Befehl, lässt jedoch die Festschreibungsnachrichten der Festschreibungen mit dem "fixup"Befehl weg.

  • Wenn Sie eine Geschichte von haben A-B-C-D-E-F,
  • und Sie möchten Commits Bund D(= 2 Commits) ändern ,

dann können Sie tun:

  • git config user.name "Correct new name"
  • git config user.email "[email protected]"
  • Erstellen Sie leere Commits (eines für jedes Commit):
    • Sie benötigen eine Nachricht für den Rebase-Zweck
    • git commit --allow-empty -m "empty"
  • Starten Sie den Rebase-Vorgang
    • git rebase -i B^
    • B^wählt das übergeordnete Element von aus B.
  • Sie möchten vor jedem zu ändernden Commit ein leeres Commit einfügen
  • Sie ändern möchten , pickum squashfür diejenigen.

Beispiel für das, was git rebase -i B^Sie erhalten:

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 das in:

# change commit B's 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's author
pick sha-commit-empty2 empty
squash sha-commit-D some message
# leave commit E-F alone
pick sha-commit-E some message
pick sha-commit-F some message

Sie werden aufgefordert, die Nachrichten zu bearbeiten:

# This is a combination of 2 commits.
# The first commit's message is:

empty

# This is the 2nd commit message:

...some useful commit message there...

und Sie können einfach die ersten paar Zeilen entfernen.

dnozay
quelle
16

Um die Antwort von Eugen Konkov zu unterstützen, verwenden Sie das --rootFlag , um mit dem Root-Commit zu beginnen . Die --no-editFlagge ist auch hilfreich

git rebase --root --exec "git commit --amend --author='name <email>' --no-edit"
korwalskiy
quelle
Dies funktionierte und änderte sich bei allen Commits.
SagarKapasi099
1
Danke für die Antwort. Es musste --interactive hinzufügen, damit es funktioniert. git rebase --root --interactive --exec "git commit --amend --author = 'name <email>' --no-edit"
Sreeragh AR
8

Finden Sie einen Weg, der den Benutzer schnell wechseln kann und keine Nebenwirkungen für andere Commits hat.

Einfacher und klarer Weg:

git config user.name "New User"
git config user.email "[email protected]"

git log
git rebase -i 1f1357
# change the word 'pick' to 'edit', save and exit

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

git push --force-with-lease

detaillierte Operationen

  • Zeigen Sie Commit-Protokolle an und ermitteln Sie die Commit-ID, die Sie vor Ihrem Commit ändern möchten:
git log
  • git rebase start von der gewählten Commit-ID bis zur letzten umgekehrt:
git config user.name "New User"
git config user.email "[email protected]"
git rebase -i 1f1357

# change word pick to edit, save and exit
edit 809b8f7 change code order 
pick 9baaae5 add prometheus monitor kubernetes
edit 5d726c3 fix liquid escape issue   
edit 3a5f98f update tags
pick 816e21c add prometheus monitor kubernetes
  • Rebase wird bei der nächsten Commit-ID gestoppt, Ausgabe:
Stopped at 809b8f7...  change code order 
You can amend the commit now, with
  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
  • Bestätigen Sie und setzen Sie Ihre Rebase fort, bis sie erfolgreich abgeschlossen ist refs/heads/master.
# each continue will show you an amend message
# use git commit --amend --reset-author --no-edit to comfirm
# use git rebase --skip to skip
git commit --amend --reset-author --no-edit
git rebase --continue
git commit --amend --reset-author --no-edit
...
git rebase --continue
Successfully rebased and updated refs/heads/master.
  • Git Push zum Update
git push --force-with-lease
NOZUONOHIGH
quelle
5

Wenn das Commit, das Sie ändern möchten, nicht das letzte Commit ist, führen Sie die folgenden Schritte aus. Wenn sich Ihr Commit in einem anderen Zweig befindet, wechseln Sie zuerst zu diesem Zweig.

git checkout branch_name

Suchen Sie das Commit vor dem Commit, das Sie ändern möchten, und suchen Sie den Hash. Geben Sie dann den Befehl rebase aus.

Git Rebase -i -p Hash von Commit

Dann öffnet sich ein Editor und gibt "Bearbeiten" für die Commits ein, die Sie ändern möchten. Belassen Sie andere mit der Standardoption "Auswählen". Einmal geändert, geben Sie 'esc' ein und wq! beenden.

Geben Sie dann den Befehl git commit mit der Änderungsoption aus.

git commit --amend --author = "Benutzername email" --no-edit

Geben Sie dann den folgenden Befehl ein.

Git Rebase - weiter

Sobald der Commit-Autor im lokalen Repository aktualisiert wurde, übertragen Sie die Änderungen in das Remote-Repository.

ChannaB
quelle
Ich denke, das ist der einfachste Weg, dies zu tun. Ich habe den Befehl reword verwendet und das schlägt fehl. Ich habe gelernt, dass ich stattdessen den Befehl edit verwenden muss. Möglicherweise kann das Schlüsselwort "Bearbeiten" hervorgehoben werden. Vielen Dank für die Antwort @ChannaB 👍
Berk
wirklich einfach zu befolgende Schritte. Vielen Dank!
Habiba
4

Es gibt auch einen faulen Ansatz für dieses Problem, insbesondere wenn Sie mehr als ein Commit haben, das Sie ändern möchten. In meinem Fall hatte ich eine neue Niederlassung mit mehreren Commits mit einem falschen Autor. Was hat mir also geholfen:

Gehen Sie zu Ihrer ursprünglichen Filiale:

git checkout develop

Erstellen Sie einen neuen Zweig daraus:

git checkout -b myFeature develop 

Führen Sie es ohne Commit-Informationen zu einem Commit zusammen:

git merge --no-commit --squash branchWrongAuthor

Möglicherweise möchten Sie auch Änderungen vornehmen:

git stage .

Ändern Sie den Namen des Autors und übernehmen Sie Änderungen:

git commit --amend --author "New Author Name <New Author Email>" -m "new feature added"

Und das war's, Sie können die Änderungen vorantreiben.

git push

Danach können Sie den Zweig mit einem falschen Autor löschen.

alexlz
quelle
4

Schritte zum Umbenennen des Autorennamens nach dem Festschreiben

  1. Geben Sie zuerst "git log" ein, um die Commit-ID und weitere Details zu erhalten
  2. git rebase i HEAD ~ 10 (10 ist das gesamte Commit, das beim Rebase angezeigt werden soll)

    If you Get anything like below

    fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try

    git rebase (--continue | --abort | --skip) If that is not the case, please rm -fr ".git/rebase-merge" and run me again. I am stopping in case you still have something valuable there.

  3. Geben Sie dann je nach Bedarf "git rebase --continue" oder "git rebase --abort" ein

    • Nachdem sich Ihr Will Rebase-Fenster geöffnet hat, klicken Sie auf der Tastatur auf "i"
    • Dann erhalten Sie eine Liste der Commits für 10 [da wir oben 10 Commits bestanden haben]

    pick 897fe9e simplify code a little

    pick abb60f9 add new feature

    pick dc18f70 bugfix

  4. Jetzt müssen Sie den folgenden Befehl direkt unter dem Commit hinzufügen, den Sie bearbeiten möchten, wie unten

    pick 897fe9e simplify code a little exec git commit --amend --author 'Author Name <[email protected]>' pick abb60f9 add new feature exec git commit --amend --author 'Author Name <[email protected]>' pick dc18f70 bugfix exec git commit --amend --author 'Author Name <[email protected]>'

    1. Das war's, jetzt drücke einfach ESC: wq und du bist fertig

    2. Dann git push origin HEAD: BRANCH NAME -f [bitte pass auf -f Force push auf]

    wie git push -fodergit push origin HEAD: dev -f

Kirtikumar A.
quelle
Gute Antwort, könnten Sie Punkt 6 mit einem Beispiel für einen git pushBefehl aktualisieren ?
Lukasz 'Severiaan' Grela
1
@ Lukasz'Severiaan'Grela bearbeitet, bitte überprüfen Sie jetzt, Danke
Kirtikumar A.
3

Globales Ändern des Committer-Namens und der E-Mail-Adresse:

$ git config --global user.name "John Doe"
$ git config --global user.email "[email protected]"

Ändern des Committer-Namens und der E-Mail-Adresse pro Repository:

$ git config user.name "John Doe"
$ git config user.email "[email protected]"

Ändern der Autoreninformationen nur für das nächste Commit:

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

Hinweis : Für andere Situationen und weitere Informationen lesen Sie die Post-Referenz .

AmerllicA
quelle
2

Wenn Sie das AUTOR OF THE LAST-Commit ändern müssen und kein anderer Ihr Repository verwendet, können Sie Ihr letztes Commit rückgängig machen mit:

git push -f origin last_commit_hash:branch_name 

Ändern Sie den Autorennamen Ihres Commits mit:

git commit --amend --author "type new author here"

Beenden Sie den sich öffnenden Editor und drücken Sie Ihren Code erneut:

git push
pebox11
quelle
2

Bei der Merge-Commit-Nachricht habe ich festgestellt, dass ich sie rebasezumindest mit gitlab nicht ändern kann . Es zeigt die Zusammenführung als Commit, aber ich kann nicht auf diese #sha zurückgreifen. Ich fand diesen Beitrag hilfreich.

git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch

Diese drei Codezeilen haben den Job zum Ändern der Merge-Commit-Nachricht (wie der Autor) ausgeführt.

Jason Liu
quelle
1

Sie können diese Befehle von der offiziellen Seite von Github verwenden

https://help.github.com/de/github/using-git/changing-author-info

Hier sind die Befehle

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="[email protected]"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="[email protected]"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

Hier können Sie die alte E-Mail in Ihren neuen Benutzernamen und Ihre neue E-Mail-Adresse ändern.

Mudassir Khan
quelle