17 Feb 2025 - Matthias Voigt
Beim Umschreiben von Git-Historien mit git rebase
setzt Git das Commit-Datum (committer date
) oft auf das aktuelle Datum, anstatt das ursprüngliche Author-Datum (author date
) beizubehalten.
Beispiel für falsche Zeitstempel:
ce5666e | Author Date: Mon Feb 17 22:57:48 2025 | Commit Date: Mon Feb 17 23:27:05 2025
95c9ef7 | Author Date: Mon Feb 17 22:34:02 2025 | Commit Date: Mon Feb 17 23:27:05 2025
Hier wurde für mehrere Commits dasselbe Commit-Datum gesetzt, was die Historie verfälscht.
Da es in manchen Situationen sinnvoll sein kann, das richtige Commit-Datum zu haben, möchte ich hier eine Lösung mit Powershell vorstellen.
Falls nur ein einzelner Commit betroffen ist:
# Hole das Author-Date als Unix-Timestamp
$authorDate = git show -s --format=%at HEAD | Out-String
$authorDate = $authorDate.Trim()
# Debug-Ausgabe zur Kontrolle
Write-Output "Using Author Date: $authorDate"
# Setze das Commit-Datum explizit
$env:GIT_COMMITTER_DATE = $authorDate
$env:GIT_AUTHOR_DATE = $authorDate
# Commit-Datum überschreiben
git commit --amend --no-edit --date="@${authorDate}"
# Falls ein Rebase läuft, fortsetzen
git rebase --continue
Falls mehrere Commits betroffen sind, kann dieses Skript helfen:
# Start-Commit definieren
$startCommit = "25aee03"
# Rebase starten
git rebase -i "$startCommit^"
# Liste der betroffenen Commits abrufen
$commits = git rev-list --reverse "$startCommit..HEAD"
foreach ($commit in $commits) {
# Hole das Author-Date
$authorDate = git show -s --format=%at $commit | Out-String
$authorDate = $authorDate.Trim()
# Debug-Ausgabe
Write-Output "Fixing commit $commit with timestamp: $authorDate"
# Setze das Commit-Datum
$env:GIT_COMMITTER_DATE = $authorDate
$env:GIT_AUTHOR_DATE = $authorDate
# Commit überschreiben
git commit --amend --no-edit --date="@${authorDate}"
# Rebase fortsetzen
git rebase --continue
}
# Änderungen hochladen
git push --force
Nach der Ausführung des Skripts sind die Commit-Zeiten korrekt:
ce5666e | Author Date: Mon Feb 17 22:57:48 2025 | Commit Date: Mon Feb 17 22:57:48 2025
95c9ef7 | Author Date: Mon Feb 17 22:34:02 2025 | Commit Date: Mon Feb 17 22:34:02 2025
Jetzt stimmen die Commit-Daten mit den tatsächlichen Author-Daten überein.
Dieses Vorgehen stellt sicher, dass bei einer Umschreibung der Git-Historie das Commit-Datum erhalten bleibt. Besonders unter PowerShell ist es wichtig, mit Unix-Timestamps zu arbeiten, um Formatierungsfehler zu vermeiden.
Wenn du bereits Commits gepusht hast, denk daran, dass du nach einer Änderung der Git-Historie mit git push --force
arbeiten musst. Dies kann Auswirkungen auf andere Entwickler haben, die an demselben Repository arbeiten.
Das Skript bietet eine einfache Möglichkeit, fehlerhafte Commit-Zeiten zu korrigieren, ohne jeden Commit manuell zu bearbeiten.