В Git я могу сделать это:
1. Начните работать над новой функцией: $ git co -b newfeature-123 # (локальная ветка разработки функций) сделать несколько коммитов (M, N, O) мастер A --- B --- C \ newfeature-123 M --- N --- O 2. Вытащите новые изменения из основной ветки разработки: $ git pull (мастер обновлен с помощью ff-коммитов) мастер A --- B --- C --- D --- E --- F \ newfeature-123 M --- N --- O 3. Перебазировать мастер, чтобы моя новая функция могут быть разработаны с учетом последних изменений в основной ветке разработки: (из newfeature-123) $ git rebase master мастер A --- B --- C --- D --- E --- F \ newfeature-123 M --- N --- O
Я хочу знать, как сделать то же самое в Mercurial, и я искал в Интернете ответ, но лучшее, что я смог найти, было: git rebase - могу ли это сделать hg
Эта ссылка содержит 2 примера:
1. Я признаю, что это: (замена ревизий из примера ревизиями из моего собственного примера)
hg up -CF hg branch -f newfeature-123 трансплантация ртути -a -b newfeature-123
это не так уж и плохо, за исключением того, что он оставляет MNO с предварительной перебазой в виде неразбавленной головы и создает 3 новых коммита M ', N', O ', которые представляют их ответвления от обновленной магистрали.
В основном проблема в том, что я в конечном итоге с этим:
мастер A --- B --- C --- D --- E --- F \ \ newfeature-123 \ M '--- N' --- O ' \ newfeature-123 M --- N --- O
это нехорошо, потому что оно оставляет после себя локальные нежелательные коммиты, которые следует отбросить
- Другой вариант из той же ссылки
hg qimport -r M: O hg qpop -a HG до F hg ветка newfeature-123 hg qpush -a hg qdel -r qbase: qtip
и это приводит к желаемому графику:
мастер A --- B --- C --- D --- E --- F \ newfeature-123 M --- N --- O
но эти команды (все 6 из них!) кажутся намного более сложными, чем
$ git rebase master
Я хочу знать, является ли это единственным эквивалентом в Hg или есть какой-то другой доступный способ, такой как Git.
git reflog
и они не исчезнут полностью, пока не соберет мусор. Если вы хотите хранить их в именованной ветке, чтобы вам не приходилось использовать reflog, просто сделайте этоgit branch feature-123_original
перед ребазингом.