git squash und den Zeitstempel des letzten Commits beibehalten

Lesezeit: 2 Minuten

Benutzer-Avatar
Crend König

Bedenken Sie, dass ich Commits habe

... -- A -- B -- C

Wenn ich benutze git rebase -i um alle drei Commits in einen zu quetschen, könnten wir

pick A
squash B
squash C

Ich sehe das resultierende Commit A hat seinen ursprünglichen Zeitstempel. Wie könnte es den Zeitstempel des Commit erben C (der Letzte)?

Was ich mir vorstellen kann ist git commit --amend --date=<new_time>aber auf diese Weise muss der Zeitstempel des Commit gespeichert werden C vor Squash oder von Reflog.

Ich finde den Zeitstempel des letzten Commits sinnvoller, weil er zeigt, wann ich die Arbeit, die in den Commits enthalten ist, tatsächlich beendet habe.

Vielen Dank.

Es gibt keinen trivialen Weg, dies zu tun, aber es gibt ein paar Optionen. Hier ist eine:

git commit --amend --date="$(git show -s --pretty=tformat:%ai <sha1-of-C>)"

Und ein anderer:

git commit --amend -c <sha1-of-C>

Letzteres wird Ihre vorhandene Commit-Nachricht überschreiben, sodass Sie sie neu schreiben müssen.

  • @CrendKing: In diesem Fall spielt es keine Rolle, ob dies der Fall ist format oder tformat weil die tformat newline wird durch die Befehlsersetzungsregeln der Shell entfernt. In 99 % der Fälle möchte ich jedoch den letzten Zeilenumbruch (oder was auch immer das Abschlusszeichen ist), da ich normalerweise die benutzerdefinierte Protokollausgabe mit einem Skript parse. Um sicherzustellen, dass ich gewohnheitsmäßig tippe tformat wenn es darauf ankommt, benutze ich tformat auch wenn es egal ist.

    – Richard Hansen

    5. April 2012 um 4:38 Uhr

git commit --amend --reset-author

  • Dies verwendet nicht den Zeitstempel von C, sondern die aktuelle Zeit als Zeitstempel.

    – Doug

    18. Januar 2018 um 1:39 Uhr

  • Dies macht nicht genau das, was das OP angefordert hat, entspricht aber (zumindest meiner Meinung nach) eher dem, was normalerweise gewünscht wird.

    – David Goldfarb

    20. Dezember 2018 um 11:39 Uhr

1217020cookie-checkgit squash und den Zeitstempel des letzten Commits beibehalten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy