Использование hg's graft
и strip
кажется более простой альтернативой использованию MQ / patches / evolve.
С помощью этого метода вы graft
делаете свои коммиты во второй повторяющейся ветви (используя функциональность изменения даты graft
). И тогда оттуда вы можете просто strip
вернуть ветку с плохими датами. Скажем, например, вы случайно создали некоторые коммиты с плохими датами, и ваша история выглядит как на графике ниже:
> 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
Чтобы это исправить, просто обновите до последней удачной ревизии, прежде чем ошибочные коммиты, а затем скопируйте коммиты в новую (анонимную) ветку, используя 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
Теперь у вас есть две одинаковые ветви с одинаковыми коммитами, но разными датами. Так что теперь вам просто нужно вернуть линейную историю, используя strip
в старой ветке:
> 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