Учебник Mercurial Очереди страшен для этого случая использования. Все примеры, которые я видел, предполагают, что вам еще предстоит совершить фиксацию, и вы обновляете один патч. В большинстве случаев это не так, и у вас есть 2 или 3 фиксации, которые вы хотите сквозировать или изменить каким-то другим способом.
Допустим, у вас есть такого рода истории:
---O---O---A---B---C
Первый пример заключается в сквош совершает A, B и C. Первый INIT кв.м.:
$ hg qinit
Теперь нам нужно " import "коммиты A, B и C в очередь исправлений. Предположим, что они являются последними 3 коммитами. Мы можем использовать синтаксис «-N» ревизии импортировать их следующим образом:
$ hg qimport -r -3:-1
Это означает, что импорт в виде патчей от 3 патчи до последней фиксации. Вы можете проверить статус этих патчей с помощью hg qseries
. Он должен показать что-то вроде этого:
$ hg qseries
101.diff
102.diff
103.diff
Где номера 101, 102 и 103 соответствуют местным номерам ревизий коммитов A, B и C. Теперь эти патчи применяются, что означает, что изменения, которые они описываются уже в рабочей копии. Вы можете избавиться от изменений рабочей копии и удалить их из истории коммитов, сохранив их только в форме патча, используя hg qpop
. Вы можете сказать hg qpop; hg qpop
, чтобы поп изменения C и B со стека, или указать патч для «pop to». В этом случае, это было бы что-то вроде этого:
$ hg qpop 101.diff
now at: 101.diff
Теперь у вас есть патчи для совершает B и C в очереди патч, но они не применяются (их изменения были «потеряны» - они существуют только в области очереди патчей). Теперь вы можете складывать эти патчи в последний, т. Е. Мы создаем новую фиксацию, которая эквивалентна сумме изменений A + B + C.
$ hg qfold -e 102.diff 103.diff
Это покажет ваш редактор, чтобы вы могли изменить сообщение фиксации.По умолчанию сообщение будет конкатенацией сообщений фиксации для изменений A, B и C, разделенных звездочками. Приятно отметить, что hg qfold
выполнит вкладку с завершающими патчами, если вы используете bash и получите сценарий hg-complete. Это оставляет историю, как это, где A + B + C является единственным коммит, который представляет собой комбинацию из 3-х пластырей, которые нас интересуют:
---O---O---A+B+C
Другой случай использования, если мы имеем такой же истории, как и раньше , но мы хотим удалить патч B и слить A + C. Это на самом деле похоже на выше. Когда вы дойдете до шага qfold, вы просто сложите в последней фиксации, а не последние 2 фиксаций:
$ hg qfold -e 103.diff
Это оставляет изменения для B в очереди патч, но он не применяется к рабочей копии и его фиксация не в истории. Вы можете увидеть это, запустив:
$ hg qunapplied
102.diff
История теперь выглядит следующим образом, где A + C представляет собой одну фиксацию, которая сочетает в себе изменения А и С:
---O---O---A+C
Окончательный вариант использования может быть, вы должны применять только совершить C. вы бы сделать это, запустив qimport, как указано выше, и вы бы палить все патчи вы не хотите:
$ hg qpop -a
в -a означает флаг палить все патчи. Теперь вы можете применить только один вы хотите:
$ hg qpush 103.diff
Это оставляет вас с этой историей:
---O---O---C
После того, как вы сделали со всем этим, вам нужно, чтобы закончить пустячные очереди. Это можно сделать с помощью:
$ hg qfinish -a
Итак, мы находимся. Теперь вы можете запустить hg push
и зафиксировать только то, что хотите, или hg email
связный патч в список рассылки.
Я спросил это недавно как дубликат. Я не знал о терминологии, поэтому я не нашел этого при поиске. См. Принятый ответ на мой вопрос, который включает hg graft, новый в Mercurial 2.0. http://stackoverflow.com/questions/10288482/workflow-to-backport-change-into-different-mercucial-branch – oob