git show --format=raw
zeigt:
commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
tree d63aeb159635cb231e191505a95a129a3b4a7b38
parent 9276202f1c0dcc360433df222c90f7874558f072
author SamWM <[email protected]> 1288370243 --700
committer SamWM <[email protected]> 1288370243 --700
Die Zeitzone Informationen hier ist ungültig, und ich bin nicht sicher, wie er Autor, dies zu schaffen verwaltet. Andere Commits verwenden das korrekte -0700
Format.
Sie können dieses mit GNU Datum konvertieren, mit dem Wissen, dass --700
-0700
sein sollen:
$ TZ=Etc/GMT+7 date -d @1288370243
Fri 29 Oct 09:37:23 GMT+7 2010
so die richtige Antwort in Git üblichem Format Fri 29 Oct 09:37:23 2010 -0700
ist.
Hinweis: Ich verwende TZ=Etc/GMT+7
, nicht GMT-7
. Sie können sehen, indem Sie den gleichen Befehl mit verschiedenen Commits ausführen, die korrekte Zeitzoneninformationen haben, dass das Ergebnis genau das ist, was es sein soll. date
's Zeitzone Konvertierung ist genau das falsche Weg herum für das, was hier benötigt wird, und durch die Negierung des Offsets ich den Fehler stornieren.
Sie können solche Commits in einer lokalen Kopie mit git hash-object
und git replace
beheben. Zunächst wird eine Plausibilitätsprüfung, dass meine Befehle sind in dieser Reihenfolge:
$ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 |
> git hash-object -t commit -w --stdin
e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
Dieser Befehl geladen die angegebene begehen, schrieb sie unmodifizierten zurück und zeigte die neu geschriebenen den Hash begehen. Ich benutze das als einen Plausibilitätscheck: wenn ich einen anderen Hash habe, müsste etwas in meinem Befehl falsch sein.
Jetzt ist es möglich, etwas einfügen eine feste verpflichten zu erstellen:
$ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 |
> sed -e 's/--700/-0700/' |
> git hash-object -t commit -w --stdin
46694249ed3d519b0c934222520b9dc6d8557fa1
und Verwendung, die stattdessen verpflichten behoben:
$ git replace e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 46694249ed3d519b0c934222520b9dc6d8557fa1
Danach werden alle Verweise auf e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
bei 46694249ed3d519b0c934222520b9dc6d8557fa1
aussehen wird statt und git show e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
beginnt jetzt mit:
commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48
Author: SamWM <[email protected]>
Date: Fri Oct 29 09:37:23 2010 -0700
Update version number, make text formatting and indentation consistent with the rest of the code
@rt fpessoa Sie müssen rohe verwenden, um das Problem zu überprüfen, aber Sie können das Problem lokal beheben, so dass Sie nie wieder darunter leiden werden, und ich habe meine Antwort geändert, um zu zeigen, wie. – hvd
@rtfpessoa Sie müssen nicht zum Repository wechseln, Sie können die neuen Objekte in Ihrem lokalen Klon dieses Repositorys erstellen, wie ich es getan habe, und Sie sehen immer noch die ursprünglichen Commit-IDs. – hvd
@rtfpessoa Das ist wahr, es ist in der Tat eine sehr spezifische Lösung, aber es ist auch eine sehr spezifische Situation. So etwas habe ich noch nie gesehen oder gelesen; Ich bin mir ziemlich sicher, dass dies kein weit verbreiteter Fehler ist und sehr wenige Repositories davon betroffen sein werden. Sie haben es in mehreren Repositories gesehen, enthalten sie vielleicht Commits desselben Autors? – hvd