Есть ли безопасного способ переименовать старые фиксации (без разветвлений произошли в то же время), что некоторые пять или шесть фиксаций вниз по дороге от текущего наконечника?Переименование старой фиксация
ответ
Это зависит от того, вы уже наложили эту фиксацию на публичное репо, или cointains сливается. Когда фиксация уже общедоступна, после этого невозможно изменить фиксацию. Кроме того, работа MQ не позволяет впоследствии редактировать транзакции слияния.
Когда коммит не является общедоступным, вы можете импортировать все коммиты в MQ (включить расширение mq и вызвать hg qimport -r»Revision«
для каждой ревизии, где ваша фиксация является предком). Затем вы удалите все патчи с помощью hg qpop --all
. После этого вы можете изменить имя филиала с помощью hg branch »name«
, которое также необходимо вызвать, когда коммит действительно ввел новое имя филиала (после qpop имя ветки предка вашего коммита будет использоваться для следующих команд qpush, если ветка отсутствует имя явно задано). Если вы хотите отредактировать сообщение фиксации, вы можете сделать это с помощью hg qpush && hg qrefresh -e
. Чтобы закончить редактирование, вы вызываете hg qpush --all && hg qfinish --applied
.
EDIT: рабочий образец
Скажи это начальное состояние, и вы хотите редактировать 4:
8 [default] (tip)
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
Теперь вы импортировать все изменения, в том числе 4, в ртутные очереди с hg qimport -r 4:8
, Теперь у вас есть следующая история:
8 [default] (8.diff, qtip, tip)
|
7 (7.diff)
|
6 (6.diff)
|
5 (5.diff)
|
4 (4.diff, qbase)
|
3 (qparent)
|
2
|
1
|
0
следующий шаг должен исключить его все патчи: hg qpop --all
3 [default] (tip)
|
2
|
1
|
0
Не паникуйте, ваша история не пошла, она все еще там, в .hg/патчи. Теперь имя филиала можно задать с помощью hg branch newbranch
. Это не видно в истории, пока не будет создана новая фиксация. Но название ветки может отображаться с hg branch
.
Теперь первая замороженная фиксации может повторно применяться с hg qpush
:
4 [newbranch] (4.diff, qbase, qtip, tip)
|
3 [default] (qparent)
|
2
|
1
|
0
Теперь вы можете перефразировать сообщение фиксации с hg qrefresh --edit
. Вы также можете изменить содержимое, отредактировав некоторые файлы в своей рабочей копии. Поэтому, если вы хотите изменить сообщение фиксации, убедитесь, что вы не изменяли файлы в своей рабочей копии до звонка hg qrefresh
. Вы можете проверить это, если вы запустите hg status
перед вызовом hg qrefresh
.
4 [newbranch] (4.diff, qbase, qtip, tip) {new commit message}
/
3 [default] (qparent)
|
2
|
1
|
0
Вы можете редактировать дальнейшие фиксации, от навигации к каждому с hg qpush
и hg qpop
. Когда вы закончите, вам необходимо преобразовать ваши исправления обратно в обычную версию. Это делается путем применения всех исправлений и завершения очереди. Это делается hg qpush --all
, а затем `hg qfinish --all
. Теперь история выглядит следующим образом:
8 [newbranch] (tip)
|
7
|
6
|
5
|
4 {new commit message}
/
3 [default]
|
2
|
1
|
0
+1 Это просто мое местное автономное репо, личного проекта. Между тем никакого слияния, ветвления или чего-либо не происходило, и нигде не было никуда. Было бы слишком много, чтобы попросить просто дать мне простой пример того, что мне нужно сделать, чтобы переименовать его? Я не понял, к сожалению, половину выше, но опять же, я использую hg довольно простым способом. – Rook
Поскольку это частный репо, который не был толкаемым в любом месте, оно должно быть совершенно безопасно редактировать историю. (Обратите внимание, что в общем случае, редактирование истории не является жизнеспособным вариантом.Это применимо только в том случае, если репо не было опубликовано.)
Существует множество расширений Mercurial, позволяющих редактировать историю, mq
является одним из них. Однако расширение histedit
, вероятно, проще в вашем случае. Он не входит в состав Mercurial, но может быть установлен довольно легко от https://www.mercurial-scm.org/wiki/HisteditExtension.
После того, как он настроен:
$ hg histedit -r $ID_OF_THE_CHANGESET_YOU_WANT_TO_EDIT
Это откроет текстовый редактор, какие бы ни, который обычно используется для hg commit
, со списком ревизий; этот список включает в себя каждый набор изменений после тот, который вы указали, поэтому прокрутите вниз. Вы увидите что-то вроде этого для каждой ревизии:
pick 2d5657b340e5 The original message for that commit
Для ревизии вам нужно изменить, изменить pick
к edit
. Затем сохраните и закройте. Вернитесь к приглашению оболочки, сделайте следующее:
$ hg histedit --continue
И вам будет предложено ввести новое сообщение о фиксации, как обычно.
- 1. фиксация вишни - это фиксация снимка или патча?
- 2. фиксация сеанса
- 3. Фиксация кривой
- 4. Фиксация кодировок
- 5. Фиксация кода
- 6. Переименование работы Дженкинса
- 7. Отмена старой быстрой превентивной фиксации
- 8. ndb_index_stat_enable = OFF в старой старой mysql 5.1.51
- 9. Обновление изменений проекта в старой фиксации
- 10. Восстановление старой WP-установки, переименование wp-контента ... восстановление ссылок на скачивание?
- 11. Переименование папок по возрастанию
- 12. Пояснение 1 фиксация перед хозяином и 1 фиксация за мастером
- 13. Java: переименование файлов - неправильное переименование файлов
- 14. Фиксация Lisp Синтаксис
- 15. Фиксация сеанса Coldfusion
- 16. Фиксация ошибки сегментации
- 17. Фиксация размера виджета GTK?
- 18. Фиксация/добавление символической ссылки
- 19. Нормализация звука/фиксация?
- 20. Фиксация изображения в div
- 21. Фиксация ClassCastExeption в HashMap
- 22. Фиксация петли JOptionsPane
- 23. Фиксация ярлыка на экране
- 24. Автоматическая фиксация фиксации
- 25. фиксация glCopyTexSubImage2D перевернутые текстуры
- 26. PHP Форма контакта Фиксация
- 27. Автоматическая фиксация в VisualHG
- 28. Фиксация preg_replace PREG_BAD_UTF8_ERROR
- 29. Фиксация кривой для геоданных
- 30. Фиксация/проверка имен?
Что значит «переименовать»? У коммитов нет имен для изменения. –
@PaulS - Не нужно быть слишком педантичным. Я серьезно думал, что формулировка будет понятна всем. Как изменить сообщение журнала, если хотите. – Rook
Не пытаясь быть педантичным, просто не был уверен, что вы хотели сделать. Например, вы могли бы говорить о имени ветви, и у вас есть ответ, в котором говорится, как изменить название ветки. Не только я понял это неправильно. –