Die Antworten zu Wie ändere ich vorhandene, nicht gepuschte Commits? Beschreiben einer Möglichkeit zum Ändern früherer Commit-Nachrichten, die noch nicht in den Upstream verschoben wurden. Die neuen Nachrichten erben die Zeitstempel der ursprünglichen Commits. Dies scheint logisch, aber gibt es eine Möglichkeit, auch die Zeiten neu einzustellen?
git
timestamp
commit
git-rewrite-history
Dhskjlkakdh
quelle
quelle
git commit --amend --reset-author
Antworten:
Verwendung
git filter-branch
mit einem env Filter, die SätzeGIT_AUTHOR_DATE
undGIT_COMMITTER_DATE
für den speziellen Hash - Wert des begehen Sie schauen , um fix.Dies macht das und alle zukünftigen Hashes ungültig.
Beispiel:
Wenn Sie die ändern wollten Daten von begehen
119f9ecf58069b265ab22f1f97d2b648faf932e0
, könnten Sie tun so etwas wie folgt aus :quelle
Sie können eine interaktive Rebase durchführen und Bearbeiten für das Commit auswählen , dessen Datum Sie ändern möchten. Wenn der Rebase-Prozess zum Ändern des festgeschriebenen Commits beendet wird, geben Sie beispielsweise Folgendes ein:
Anschließend setzen Sie Ihre interaktive Rebase fort.
UPDATE (als Antwort auf den Kommentar von studgeek): um das Festschreibungsdatum anstelle des Autorendatums zu ändern:
In den obigen Zeilen wird eine Umgebungsvariable GIT_COMMITTER_DATE festgelegt, die beim Ändern des Commits verwendet wird.
Alles wird in Git Bash getestet.
quelle
rebase
, Sie können einfach dasgit commit --amend
+ var fixedDate = strftime(new Date(), "%c"); + var result = shelljs.exec("git commit --amend --date=\"" + fixedDate + "\" --no-edit");
Eine bessere Möglichkeit, alle diese Vorschläge in einem Befehl zu verarbeiten, ist
Dadurch werden das Festschreibungs- und Autorendatum des letzten Commits auf "jetzt" gesetzt.
quelle
LANG= GIT_COMMITTER_DATE="`date`" git commit --amend --date "`date`"
--date "now"
. Git> = 2 wird das interpretieren.Tu es einfach
git commit --amend --reset-author --no-edit
. Bei älteren Commits können Sie eine interaktive Rebase durchführen undedit
das Commit auswählen , dessen Datum Sie ändern möchten.Ändern Sie dann das Commit mit
--reset-author
und--no-edit
, um das Autorendatum auf das aktuelle Datum zu ändern:Fahren Sie abschließend mit Ihrer interaktiven Rebase fort:
quelle
--reset-author
, es ist neu in Git 1.6.6 (ref gitlog.wordpress.com/2010/01/13/git-1-6-6 )--reset-author
setzt sowohl den Autor als auch das Autorendatum auf jetzt zurück.Ich habe dafür ein Skript und ein Homebrew-Paket geschrieben. Super einfach zu installieren, finden Sie es auf der GitHub-
PotatoLabs/git-redate
Seite.Syntax:
Sie müssen nur ausgeführt werden
git redate
und können alle Daten in den letzten 5 Commits bearbeiten (es gibt auch eine-c
Option für die Anzahl der Commits, die Sie zurückgehen möchten, standardmäßig 5). Lassen Sie mich wissen, wenn Sie Fragen, Kommentare oder Vorschläge haben!quelle
Jedes Commit ist mit zwei Daten verknüpft, dem Committer-Datum und dem Autorendatum. Sie können diese Daten anzeigen mit:
Wenn Sie das Autorendatum und das Committer-Datum der letzten 6 Commits ändern möchten, können Sie einfach eine interaktive Rebase verwenden:
.
Ersetzen Sie für alle Commits, bei denen Sie das Datum ändern möchten,
pick
durchedit
(oder nure
), speichern Sie den Editor und beenden Sie ihn.Sie können jetzt jedes Commit ändern, indem Sie das Autorendatum und das Committerdatum im ISO-8601-Format angeben:
Das erste Datum ist das Festschreibungsdatum, das zweite das Autorendatum.
Fahren Sie dann mit dem nächsten Commit fort mit:
Wiederholen Sie den Vorgang, bis Sie alle Ihre Commits geändert haben. Überprüfen Sie Ihren Fortschritt mit
git status
.quelle
git checkout name-of-current-branch
.--no-edit
ingit commit --amend --no-edit --date=2017-10-08T09:51:07
, um die alte Festschreibungsnachricht beizubehalten.GIT_COMMITTER_DATE
wie hier beschrieben aktualisieren eddmann.com/posts/…quelle
Aufbauend auf der Antwort von theosp habe ich ein Skript mit dem Namen (für das Festschreiben des Änderungsdatums) geschrieben, das ich in mein Skript eingefügt habe .
git-cdc
PATH
Der Name ist wichtig: An
git-xxx
jeder Stelle in IhremPATH
können Sie Folgendes eingeben:Dieses Skript ist in Bash, sogar unter Windows (da Git es aus seiner msys-Umgebung aufruft )
Damit können Sie Folgendes eingeben:
Dies würde das Autor / Commit-Datum des Commits vor HEAD (
@~
) auf das angegebene Datum zurücksetzen .Das würde das Autor / Commit-Datum des Commits vor HEAD (
@~
) auf dieselbe Stunde zurücksetzen , jedoch vor 2 Tagen.Ilya Semenov erwähnt in den Kommentaren :
quelle
git cdc @~ "2014-07-04 20:32:45
Andernfalls würde es die Uhrzeit nicht erkennen und somit die Uhrzeit 00:00:00 erhalten (dies wird das dritte Argument).brew install coreutils
) installieren , es zu PATH (PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
) hinzufügen und dann die Syntax "vor 2 Tagen" verwenden.2 days ago
"?So bearbeiten Sie mehrere Festschreibungsdaten
Andere Antworten sind nicht sehr praktisch, um mehrere Festschreibungsdaten zu bearbeiten. Ich bin nach einigen Jahren auf diese Frage zurückgekommen, um eine Technik zu teilen.
So ändern Sie die Daten der letzten 4 Commits:
Bearbeiten Sie die Rebase wie folgt und fügen Sie
exec
Zeilen ein, um die Daten nach Bedarf zu ändern:quelle
--amend
/--date
. Einfacher als meine eigene Antwort mit Umgebungsvariablen. Upvoted.GIT_AUTHOR_DATE
nur aktualisiert .exec git commit --amend --no-edit --date "now"
Wenn es das letzte Commit ist.
Wenn Sie bereits auf Orgin drücken und die Verwendung erzwingen können:
Wenn Sie den Push nicht erzwingen können und wenn er gedrückt wird, können Sie das Commit nicht ändern! .
quelle
Hier ist ein praktischer Alias, der sowohl die Festschreibungs- als auch die Autorenzeit der letzten Festschreibung in eine Zeit ändert, die akzeptiert wird von
date --date
:Verwendungszweck:
git cd <date_arg>
Beispiele:
Bearbeiten: Hier ist eine automatisiertere Version, die überprüft, ob der Index sauber ist (keine nicht festgeschriebenen Änderungen) und die letzte Festschreibungsnachricht wiederverwendet oder anderweitig fehlschlägt (narrensicher):
quelle
Ich habe dieses npm-Paket erstellt, um das Datum alter Commits zu ändern.
https://github.com/bitriddler/git-change-date
Beispielnutzung:
Sie werden aufgefordert, das Commit auszuwählen, das Sie ändern möchten, und dann das neue Datum einzugeben.
Wenn Sie ein Commit durch einen bestimmten Hash ändern möchten, führen Sie dies aus
git-change-date --hash=[hash]
quelle
Die folgende Bash-Funktion ändert die Zeit eines Commits für den aktuellen Zweig.
Achten Sie darauf, dass Sie es nicht verwenden, wenn Sie das Commit bereits gepusht haben oder wenn Sie das Commit in einem anderen Zweig verwenden.
quelle
if [[ -z "$commit" ]]
->if [[ -z "$date_timestamp" ]]
GIT_COMMITTER_DATE=
am Ende der Methode vorzunehmen, um weitere manuelle Festschreibungen zur Einhaltung des angegebenen Datums zu verhindern.So ändern Sie sowohl das Autorendatum als auch das Festschreibungsdatum:
quelle
Wenn Sie das genaue Datum eines anderen Commits erhalten möchten (sagen Sie, Sie haben ein Commit erneut bearbeitet und möchten, dass es das Datum der ursprünglichen Pre-Rebase-Version enthält):
Dadurch wird das Datum des HEAD-Commits so korrigiert, dass es genau das Datum des Commits a383243 ist (bei Unklarheiten mehr Ziffern einfügen). Es wird auch ein Editorfenster geöffnet, in dem Sie die Festschreibungsnachricht bearbeiten können.
Dies ist das Autorendatum, für das Sie sich normalerweise interessieren - siehe andere Antworten für das Datum des Committers.
quelle
Wenn Sie die akzeptierte Antwort ( https://stackoverflow.com/a/454750/72809 ) in der Standard-Windows-Befehlszeile ausführen möchten , benötigen Sie den folgenden Befehl:
Anmerkungen:
^
), aber es ist mir nicht gelungen.Vielen Dank an einen Blogbeitrag von Colin Svingen . Obwohl sein Code bei mir nicht funktionierte, half er mir, die richtige Lösung zu finden.
quelle
Wenn Commit noch nicht gepusht ist, kann ich so etwas verwenden:
Danach öffnet git bash den Editor mit dem bereits angewendeten Datum. Sie müssen ihn nur speichern, indem Sie im Befehlsmodus des VI-Editors ": wq" eingeben, und Sie können ihn verschieben
quelle
--no-edit
Option.git push -f
(erzwungenes Update) pushen . Das kann jedoch Nebenwirkungen haben. (besonders wenn viele Leute lokale Klone des Repository haben)Für diejenigen, die Powershell verwenden
Gutschrift an https://mnaoumov.wordpress.com/2012/09/23/git-change-date-of-commit/
quelle
Es gibt bereits viele gute Antworten, aber wenn ich das Datum für mehrere Commits an einem Tag oder in einem Monat ändern möchte, finde ich keine richtige Antwort. Also erstelle ich ein neues Skript dafür mit Erläuterung, hoffe es wird jemandem helfen:
Das Datum wird geändert:
quelle