Aktualisieren Sie das Autorendatum von git commit bei der Änderung

305

Ich habe meine Verpflichtungen ziemlich oft geändert. Ich nichtstash so viel, weil ich dazu neige zu vergessen, dass ich es getan habe, besonders wenn ich speichern möchte, was ich getan habe, bevor ich gehe oder vor einem Wochenende, also mache ich einen "Entwurf". Das einzige ist, wenn ich das Commit ändere, wird es immer noch auf das ursprüngliche Autorendatum gesetzt. Gibt es eine (einfache) Möglichkeit, es bei Änderungen zu aktualisieren?

ksol
quelle
5
Dies ist besonders nützlich, wenn Sie eine interaktive Rebase durchführen und erwarten, dass GitHub die Commits in der Pull-Anforderung in Baumreihenfolge anstelle der Datumsreihenfolge anzeigt.
Sukima

Antworten:

368

Sie können das Autorendatum mit dem --dateParameter auf ändern git commit. Wenn Sie also das letzte Commit ändern und das Autorendatum auf das aktuelle Datum und die aktuelle Uhrzeit aktualisieren möchten, haben Sie folgende Möglichkeiten:

git commit --amend --date="$(date -R)"

(Der -RParameter, datemit dem das Datum im RFC 2822-Format ausgegeben werden soll. Dies ist eines der Datumsformate, unter denen verstanden wirdgit commit .)

Mark Longair
quelle
27
FTR, sieht aus wie unter OS X, dateweiß es nicht -R. Die Verwendung dateohne Optionen hat den Job trotzdem
erledigt
7
Beachten Sie, dass Sie, wenn Sie dies als Alias ​​möchten, ein hinzufügen !und die Anführungszeichen entfernen müssen, z. B.can = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg,
9
date -Rfunktioniert nicht unter OSX, verwenden Sie date +%sstattdessen
Stash
4
Idem für FreeBSD:git commit --amend --date="$(date +%s)"
Dereckson
120
git commit --amend --date=nowfunktioniert auch. Es ist nicht erforderlich, eine Unterschale mit dem Befehl date (1) aufzurufen . Sie können es im Quellcode von git (1) in date.c sehen. C 'now' ist ein spezieller Wert, der mit der Funktion date_now () konvertiert wird. Gleiches gilt für 'Mittag', 'Gestern', 'Mitternacht', 'Tee' und andere, die im Strukturarray special [] aufgeführt sind.
sbz
267

Ein anderer Weg, dies zu tun, ist

git commit --amend --reset-author

Dies ändert sowohl den Commit-Autor als auch das Datum - aber wenn es ursprünglich Ihr nicht gepushtes Commit war, dann ist das ein No-Op.

Sie können auch hinzufügen, --no-editwenn Sie das Datum für mehrere Festschreibungen aktualisieren möchten, die Festschreibungsnachrichten jedoch unberührt bleiben sollen. Auf diese Weise werden Sie nicht aufgefordert, die Nachricht für jedes Commit zu bearbeiten.

Rup
quelle
4
Ich frage mich, warum dieses Verhalten nicht standardmäßig ist und explizit angegeben werden sollte. Es ist sehr überraschend und führt zu möglicherweise schlimmen Konsequenzen. Nach meinem Verständnis werden git commit --amend Änderungen eher festgeschrieben als nur Optimierungen oder ähnliches, dh sie führen zu einem unterschiedlichen Verlauf von Änderungen des Repository-Inhalts, bei denen jedes Versionskontrollsystem sehr streng ist. Und als solches erwarte ich intuitiv, dass sowohl der Autor als auch das Datum mit den tatsächlichen Festschreibungsdaten übereinstimmen. Besonders die Urheberschaft ist wichtig, nicht einmal das Datum. Stimmen Sie diesen Kommentar ab, wenn Sie Git-Entwickler schlagen möchten, die für einen solchen Standard verantwortlich sind. :)
Artem Pisarenko
258

Ab Git v2.1.4 (getestet auf Debian 8 (Jessie))

git commit --amend --date=now
Kamal
quelle
8
Und wenn Sie die Commit-Nachricht nicht mehr sehen möchten, fügen Sie hinzu --no-edit.
Henrik N
12

Ich mag Marks Antwort und habe sie selbst mehrmals benutzt, aber jetzt bin ich unter OS X und werde date -Rnicht unterstützt. Aber alles ist viel einfacher als die ursprüngliche Antwort uns denken ließ, benutze einfach eine leere Zeichenfolge !

git commit --date= --amend
JLarky
quelle
6
Das geht nicht Git bricht mit dem Fehler abfatal: invalid date format:
Nikos C.
Arbeitete für mich (unter Windows, Git 1.9.4)
Csq
1
Besser --date="$(date)"in OS X zu verwenden. Die Option -Rist GNUism.
Rudá Moura
0

Ich habe dieses npm-Paket erstellt, wenn jemand noch nach einer einfachen Möglichkeit sucht, die Daten mehrerer Commits zu ändern.

https://github.com/bitriddler/git-change-date

Verwendungszweck:

npm install -g git-change-date
cd [your-directory]
git-change-date
Kareem Elbahrawy
quelle
17
Braucht man wirklich ein anderes npmPaket? Nein, lernen Sie, wie Sie den gitBefehl unverändert verwenden.
Urda