2015-02-16 4 views
20

Ist es möglich, das Commit-Datum von meinem Commit zum Autor-Datum zu ändern?GIT: Commit-Datum zum Autoratum ändern

Ich habe einige Commits angepasst und jetzt sind die Daten alle gleich. Ich möchte es auf die alten Daten (oder die Autorendaten) zurücksetzen. Ist das möglich?

Ich benutze Sourcetree, also habe ich die Git-Befehlszeile, aber ich bin kein Profi dabei. Mein externes Repository ist bitbucket.

+1

Verwandte zu http://stackoverflow.com/questions/454734/how-can-one-change-the-timestamp-of-an-old-commit-in-git? – Martin

+0

Ja, aber ich habe tatsächlich die neuen Daten gepusht. – kevingoos

+1

Die neuen Commit-Daten spiegeln jedoch die Realität wider. Warum willst du die Wahrheit verbergen? –

Antwort

16

Seit git 1.6.3 git rebase hat --committer-date-is-author-date für diesen Zweck.

git rebase --committer-date-is-author-date 

Ursprüngliche Antwort:
Es gibt keine einfache Möglichkeit, den Committer Daten (edit: aber siehe "bearbeiten 2" weiter unten) einzustellen. Die Autor Termine sind einfach zu (Commit-Zeit) zu justieren, da --date Sie jeden angeben können, wie Sie gehen.

Die Umgebungsvariable GIT_COMMITTER_DATE kann zum Erzwingen eines anderen Zeitstempels zum Zeitpunkt des Commits verwendet werden. Beachten Sie jedoch, dass Sie dies für jeden Commit, den Sie "wiederholen" müssen, anpassen müssen. Der resultierende neue Commit wird einen anderen SHA-1 haben (weil Sie einige Bits darin geändert haben, nämlich das Committer-Datumsfeld), was bedeutet, dass Sie alle seine abgeleiteten Commits wiederholen müssen.

Dies ist, was git filter-branch tut (erstellen Sie einige, viele oder alle Commits mit Änderungen auf dem Weg gemacht, halten eine Zuordnung von alten SHA-1-IDs zu neuen SHA-1 IDs und Anpassung der Eltern von even-sonst -berührte Commit-Kopien, so dass die "neue" DAG der neuen SHA-1-IDs mit der "alten" DAG auf jede mögliche Weise übereinstimmt, dh in jeder Hinsicht mit Ausnahme der SHA-1-IDs und anderer Änderungen, die von Ihren Filtern vorgenommen wurden).

Mit anderen Worten, um dies zu tun, müssen Sie git filter-branch verwenden, um Geschichte neu zu schreiben, mit allem, was dies bedeutet. [Edit: Sie buchstäblich es tun können, ohne git filter-branch, zum Beispiel, indem sie es in git rebase -i stattdessen tun, aber die Wirkung ist das gleiche.]

Edit 2: als uvb in einem Kommentar darauf hingewiesen (seit entfernt), git rebase hat --committer-date-is-author-date für diesen Zweck. Es macht immer noch die gleiche Geschichte neu schreiben, aber es ist viel bequemer als mit dem rohen git filter-branch Befehl.

29
git filter-branch --env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' 
+0

Dies sollte die akzeptierte Antwort sein. @ Toreks Antwort ist jedoch gut zu wissen. –