Ich habe eine Reihe von Commits in Git vorgenommen und stelle jetzt fest, dass ich vergessen habe, meinen Benutzernamen und die E-Mail-Eigenschaften des Benutzers korrekt festzulegen (neuer Computer). Ich habe diese Commits noch nicht in mein Repository verschoben. Wie kann ich diese Commits korrigieren, bevor ich dies tue (nur die 3 letzten Commits im Hauptzweig)?
Ich habe nachgeschaut git reset
und git commit -C <id> --reset-author
, aber ich glaube nicht, dass ich auf dem richtigen Weg bin.
git
git-commit
git-rewrite-history
pauldoo
quelle
quelle
remote: error: GH007: Your push would publish a private email address.
... `! [remote abgelehnt] master -> master (Push aufgrund von E-Mail-Datenschutzbeschränkungen abgelehnt) `.Antworten:
Rebase / Amendment scheint ineffizient zu sein, wenn Sie die Kraft des Filterzweigs zur Hand haben:
(aus Gründen der Übersichtlichkeit über Linien aufgeteilt, aber nicht erforderlich)
Überprüfen Sie das Ergebnis, wenn Sie fertig sind, um sicherzustellen, dass Sie nichts geändert haben, was Sie nicht wollten!
quelle
git filter-branch --help
ist ziemlich einfach :)--tag-name-filter cat
um diefilter-branch
um Migrate Tags in die neue Geschichte. Es wird auch--branches --tags
anstelle von verwendet--all
, wodurch nur der Zweig- und Tag-Verlauf neu geschrieben wird und andere inrefs
Ruhe gelassen werden (obwohl dies wahrscheinlich keinen großen Unterschied macht, es sei denn, Sie verwenden z. B.git-notes
)-- --all
mitHEAD~1..HEAD
git log HEAD~2..HEAD
?Der interaktive Rebase-Ansatz ist in Verbindung mit exec sehr hilfreich. Sie können einen beliebigen Shell-Befehl für ein bestimmtes Commit oder alle Commits in der Rebase ausführen.
Stellen Sie zuerst Ihre Git-Autoreneinstellungen ein
Dann, um den Autor für alle Commits nach dem angegebenen SHA zurückzusetzen
Daraufhin wird Ihr Editor geöffnet, um die Änderungen zu bestätigen. Alles, was Sie hier tun müssen, ist Speichern und Beenden. Es wird jedes Commit durchlaufen und den im Flag -x angegebenen Befehl ausführen.
Per @ Daves Kommentar unten können Sie auch den Autor ändern, während Sie die ursprünglichen Zeitstempel beibehalten mit:
quelle
filter-branch
wenn Sie nur Ihre letzten Commits korrigieren möchten :). Beachten Sie jedoch, dass dies den Zeitstempel der Commits ändert.git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <[email protected]>' -CHEAD"
git log
zeigte auch alte Autorenschaft für mich, aber der Git-Status identifizierte neue Commits korrekt und nach Force Push waren sie so, wie ich es beabsichtigt hatte.git rebase -i --root …
anstatt eine SHA zu übergeben.So ändern Sie den Autor nur für das letzte Commit:
Angenommen, Sie möchten den Autor nur für die letzten N Commits ändern:
ANMERKUNGEN
--no-edit
Flagge sorgt dafür, dass diegit commit --amend
dass keine zusätzliche Bestätigung angefordert wirdgit rebase -i
, können Sie manuell festlegen, wo der Autor geändert werden soll.Die von Ihnen bearbeitete Datei sieht folgendermaßen aus:
quelle
--rebase-merges
(kurze-r
) Option hinzuzufügen , um die Topologie Ihres Zweigs intakt zu halten, wenn er einige Zusammenführungen enthält.Diese Methode wurde von github zu diesem Zweck dokumentiert. Die Schritte sind:
OLD_EMAIL
,CORRECT_EMAIL
undCORRECT_NAME
)git push --force --tags origin 'refs/heads/*'
und Sie sind fertig!quelle
Ich glaube, was Sie suchen, ist
git rebase --interactive
Sie können auf ein bestimmtes Commit zurücksetzen und dann den Verlauf ändern, indem Sie Commits hinzufügen oder gruppieren
Hier haben Sie eine Erklärung https://web.archive.org/web/20100213104931/http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase -interaktiv
quelle
Wenn Sie sich beim Abwerten und Ändern unsicher fühlen, können Sie dies auf diese Weise tun. Gleichzeitig würden Sie auch die globale Konfiguration festlegen, die Sie wahrscheinlich sowieso vorhatten.
git reset HEAD~
(letztes Commit rückgängig machen)git config --global user.name "Your Name"
git config --global user.email [email protected]
git commit -m "message"
quelle