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. Mit
    git log -n 10 --oneline

    werden die letzten Commits im Repo angezeigt.

  3. Dann mit
    git rebase -i HEAD~N

    die 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 mit
    git 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 mit
    git rebase --continue

    zum nächsten Commit springen.

  6. Wenn alle Commits Signiert wurden, kann mit
    git log --show-signature

    überprüft werden, ob die Signaturen richtig an die Commits getackert wurden.

  7. Zum Schluss kann mit
    git push --force origin main

    die neue Commit-Historie force-pushed werden zum Main-Branch.

Damit sollte der Pull-Request mergebar werden.

Viel Spaß beim Contributen!