Signing von Commits auf Main/Master-Branches nachholen: So ist das möglich!

Im Rahmen der Arbeiten an einem Open-Source Projekt hatte ich neulich das Problem, dass ich nach dem Aufsetzen eines neuen Macs erste Commits nicht verifiziert bzw. signiert waren. Damit hatte ich die Challenge, diese Nachträglich zu signieren, um den Pull-Request überhaupt und trotz strikt "enforced merge security through commit validation" in das Main-Repo mergen zu können. Meistens finden sich Internet Anleitungen für das Resignieren von Commits auf Branches abseites des Main-Branches - da ich in dem Fall aber direkt auf dem Main-Branch gearbeitet habe, musste ich mir auch erstmal überlegen, wie dieses am einfachsten zu bewerkstelligen ist: Dies klappt mit einem Force-Push nach einem Rebase. Beim Main/Master-Branch kann dies über das manuelle Auswählen der betroffenen Commits geschehen.

Hier der Workflow, bei diesem ist es wichtig, Commit-Signing aktiviert und getestet zu haben (wie das möglich is, steht in diesem Gist für MacOS):

  1. Zuerst wird im Terminal der richtige Ordner ausgewählt, in dem das Git-Repo liegt.
  2. Mitgit log -n 10 --onelinewerden die letzten Commits im Repo angezeigt.
  3. Dann mitgit rebase -i HEAD~Ndie letzten Commits rebasen: N wird durch die Anzahl der Commits, die Resigniert werden müssen, ersetzt (z.B. 5). Es öffnet sich ein Editor, bei dem jeder Commit mit "edit" statt "pick" vorausgewählt werden muss. Nach dem speichern und schließen der Datei wird der interaktive Modus zum Rebasen gestartet
  4. Dann mitgit commit --amend '-S' --author "USERNAME <MAILADRESSE_DER_SIGNATUR>"die Resignatur durchführen: Hier öffnet sich jedes mal ein Editor mit der Commit-Nachricht. Ich würde hier nichts ändern.
  5. Nach jedem bearbeiteten Commit mitgit rebase --continuezum nächsten Commit springen.
  6. Wenn alle Commits Signiert wurden, kann mitgit log --show-signatureüberprüft werden, ob die Signaturen richtig an die Commits getackert wurden.
  7. Zum Schluss kann mitgit push --force origin maindie neue Commit-Historie force-pushed werden zum Main-Branch.
Die letzten Commits im Git-Log
Die letzten Commits im Git-Log
Und die fertig validierten Commits nach dem force-push
Und die fertig validierten Commits nach dem force-push

Damit sollte der Pull-Request mergebar werden.

Viel Spaß beim Contributen!