Ändern Sie die Zeitstempel, während Sie den Git-Zweig neu gründen

97

Ich habe die Commits in einer Zweigstelle neu organisiert, bevor sie veröffentlicht werden, sodass die Zeitstempel der Commits in einer gemischten Reihenfolge vorliegen. Ich hätte sie lieber alle heute mit nur Sekunden dazwischen.

Natürlich werden diese Zeitstempel auch nicht korrekt sein, aber da dies die Zeit ist, in der die Dinge an die Öffentlichkeit gehen, ziehe ich das zeitlich einer gemischten Geschichte vor.

Wie kann ich git anweisen, beim Neubasieren neue Zeitstempel zu erstellen?

Tarsius
quelle

Antworten:

134
git rebase --ignore-date
Michael Krelin - Hacker
quelle
2
Ich habe es vor dem Posten versucht. Abgesehen davon, dass ich es nicht interaktiv gemacht habe, ist das vielleicht der Trick? Haben Sie auch den Alias ​​--committer-date-is-author-date ausprobiert? Vielleicht wurde das --ignore-Datum in einer späteren Version eingeführt, ich habe keine Ahnung.
Michael Krelin - Hacker
2
Ja, wenn es nicht interaktiv gemacht wird, funktioniert es. Aber dann - wie immer bei Rebase - ist das allererste Commit nicht betroffen.
Tarsius
2
@ MichaelKrelin-Hacker: Laut Dokumentation --ignore-date Diese Flags werden an git am übergeben, um die Daten der neu basierten Commits einfach zu ändern (siehe git-am [1]). Inkompatibel mit der Option --interactive.
Tim
4
@Tim Das Root-Commit hat kein übergeordnetes Element. Als ich diese Frage stellte, wollte ich auch das Datum dieses Commits ändern. Jetzt haben wir --root, was dies möglich macht.
Tarsius
3
Incompatible with the --interactive option. Siehe docs
Vlastimil Ovčáčík
28

In meinem Fall wurden die Zeitstempel durch erneutes Basieren auf den CommitDate-Wert geändert, sodass in gitweb einige Monate alte Commits als 4 Tage alt angezeigt wurden. Ich habe das letzte Commit mit dem richtigen Datum gefunden und Folgendes getan:

$ git rebase --committer-date-is-author-date SHA
lkraav
quelle
39
Nein, ist es nicht. In der Tat ist es genau das Gegenteil. Aus den Dokumenten von git rebase: " Diese Flags werden übergeben, git amum die Daten der neu basierten Commits einfach zu ändern ." Darin git amheißt es: --committer-date-is-author-date" [...] erlaubt dem Benutzer, über das Committer-Datum zu lügen, indem er denselben Wert wie das Autorendatum verwendet ", während --ignore-date" [...] dem Benutzer erlaubt, über das Autorendatum zu lügen, indem er denselben Wert verwendet als Committer-Datum ".
Enrico Campidoglio
9

Es gibt folgende Möglichkeiten

  1. Normaler Rebase

    git rebase --ignore-date
    
  2. Interaktive Rebase

    git rebase -i master
    git commit --amend --date=now
    git push origin <branch> -f
    
Umar Asghar
quelle