20 Stimmen

Wie ändere ich die Übergabezeit (noch nicht gedrückt)?

Wie kann ich die Zeit ändern, zu der ich eine Übergabe in meinem lokalen Repository vorgenommen habe?

Angenommen, ich habe mehrere Übertragungen vorgenommen und festgestellt, dass das Datum auf meinem Computer falsch ist. Nehmen wir außerdem an, dass diese Übertragungen noch nirgendwo veröffentlicht wurden.

16voto

Eric Punkte 4887

Wenn es sich nur um einen einzigen Commit handelt, und dieser Commit der jüngste ist (egal auf welchem Zweig Sie sich befinden), ist ein schneller Einzeiler dafür:

hg commit --amend -d now

10voto

Alexander Lebedev Punkte 5832

Es gibt --date Flagge für hg commit So überschreiben Sie die Übertragungszeit. Die Frage ist, wie man frühere Änderungen ohne Werkzeug viel Schmerz neu zu bestätigen.

Nehmen wir an, Sie erhalten den folgenden Verlauf der lokalen Übertragungen:

dir1> hg commit # r100, OK
dir1> hg commit # r101, need to fix time
dir1> hg commit # r102, need to fix time

Hier ist meine Lösung:

hg diff -r100:101 > 101.diff
hg diff -r101:102 > 102.diff
cd ..
hg clone -r100 dir1 dir2 # create a copy just before changesets than needs to be fixed
cd dir2
patch -i ../dir1/101.diff
hg commit -m "Same commit message" --date="required date"
patch -i ../dir1/102.diff
hg commit -m "Same commit message" --date="required date"
cd ..
rm -rf dir1 &&  mv dir2 dir1 # replace working copy

Sie können die Anwendung von Patches automatisieren mit hg patch die ich in meiner Praxis noch nicht verwendet habe.

10voto

Ry4an Brase Punkte 77642

Mit MQ (Mercurial Queues) können Sie das ganz einfach tun:

Einrichten einer Wiedervorlage für schlechte Daten

+ hg init
+ echo line
+ hg commit -A -d 12/1 -m first
adding file
+ echo line
+ hg commit -A -d 12/2 -m second
+ echo line
+ hg commit -A -d 12/3 -m third
+ hg log
changeset:   2:81c88de729a8
tag:         tip
user:        Ry4an Brase <ry4an@mini>
date:        Thu Dec 03 00:00:00 2009 -0600
summary:     third

changeset:   1:c1fe70008824
user:        Ry4an Brase <ry4an@mini>
date:        Wed Dec 02 00:00:00 2009 -0600
summary:     second

changeset:   0:abb97adaa541
user:        Ry4an Brase <ry4an@mini>
date:        Tue Dec 01 00:00:00 2009 -0600
summary:     first

Umwandlung der Änderungssätze in Patches in der Warteschlange

+ hg qimport -r 2
+ hg qimport -r 1
+ hg qimport -r 0

Machen Sie jeden Patch die qtip wiederum und fixieren Sie das Datum

+ hg qrefresh -D
+ hg qpop
Now at: 1.diff
+ hg qrefresh -D
+ hg qpop
Now at: 0.diff
+ hg qrefresh -D

Erneutes Aufkleben der Pflaster

+ hg qpush
applying 1.diff
Now at: 1.diff
+ hg qpush
applying 2.diff
Now at: 2.diff

Jeden Patch in einen echten Änderungssatz zurückverwandeln

+ hg qdel -r 0
+ hg qdel -r 1
+ hg qdel -r 2

Alles besser:

+ hg log
changeset:   2:6b51e14aadfc
tag:         tip
user:        Ry4an Brase <ry4an@mini>
date:        Wed Feb 25 22:29:01 2009 -0600
summary:     third

changeset:   1:5cbb9fc51bcc
user:        Ry4an Brase <ry4an@mini>
date:        Wed Feb 25 22:29:02 2009 -0600
summary:     second

changeset:   0:ec58d1f24278
user:        Ry4an Brase <ry4an@mini>
date:        Wed Feb 25 22:29:02 2009 -0600
summary:     first

1voto

Miles Alan Punkte 21

Mit hg's graft y strip scheint eine einfachere Alternative zur Verwendung von MQ/Patches/Evolve zu sein.

Mit dieser Methode können Sie graft Ihre Übertragungen auf einen 2. doppelten Zweig (unter Verwendung der Datumsänderungsfunktion von graft ). Und von dort aus können Sie dann einfach strip den Zweig mit den schlechten Daten zurück Nehmen wir an, Sie haben versehentlich einige Commits mit falschen Daten erstellt und Ihr Verlauf sieht wie das folgende Diagramm aus:

> hg log -GT'{rev}:{desc} ({date|isodatesec})'
@  8:good commit (2018-03-18 20:13:07 2018 -0500)
|
o  7:erroneous commit two (2018-12-01 00:00:00 2018 -0600)
|
o  6:erroneous commit one (2018-12-01 00:00:00 2018 -0600)
|
o  5:commit before you started commiting bad dates

Um dies zu beheben, aktualisieren Sie einfach auf die letzte gute Revision vor Ihren fehlerhaften Übertragungen und kopieren Sie dann die Übertragungen in einen neuen (anonymen) Zweig mit graft :

> hg up 5
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> hg graft -D -r6 -r7 -r8
> hg log -GT'{rev}:{desc} ({date|isodatesec})'
@  11:good commit (2018-03-18 20:14:48 2018 -0500)
|
o  10:erroneous commit two (2018-03-18 20:14:48 2018 -0500)
|
o  9:erroneous commit one (2018-03-18 20:14:48 2018 -0500)
|
| o  8:good commit (2018-03-18 20:13:07 2018 -0500)
| |
| o  7:erroneous commit two (2018-12-01 00:00:00 2018 -0600)
| |
| o  6:erroneous commit one (2018-12-01 00:00:00 2018 -0600)
|/
o  5:commit before you started commiting bad dates

Jetzt haben Sie zwei identische Zweige mit denselben Commits, aber unterschiedlichen Daten. Jetzt müssen Sie nur noch Ihren linearen Verlauf zurückgeben, indem Sie strip auf dem alten Zweig:

> hg strip -r6 -r7 -r8
saved backup bundle to /home/miles/repo/.hg/strip-backup/ac1973513844-a8f5244e-backup.hg
> hg log -GT'{rev}:{desc} ({date|isodatesec})'
@  8:good commit (2018-03-18 20:14:48 -0500)
|
o  7:erroneous commit two (2018-03-18 20:14:48 -0500)
|
o  6:erroneous commit one (2018-03-18 20:14:48 -0500)
|
o  5:commit before you started commiting bad dates

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X