перенос незафиксированных изменений с неправильной ветви в правую ветвь

#mercurial

#mercurial

Вопрос:

Я использую Mercurial.

У меня есть некоторые незафиксированные изменения, но я нахожусь не на той ветке, как мне обновить нужную ветку и забрать изменения с собой?

Ответ №1:

Для незафиксированных изменений вы можете использовать расширение Shelve:

  1. hg shelve --all
  2. hg up correct_branch_name
  3. hg unshelve

Комментарии:

1. Моя версия hg (3.7.3), похоже, не использует --all флаг. Просто вызывая hg shelve полки все.

Ответ №2:

Я спросил в irc

mpm сказал

 hg diff > mychanges; hg up -C somewhere; hg import --no-commit mychanges
  

что я рассматривал, но это то, чего я пытался избежать.

d70 сказал

 i think you can easily do it by "hg update"ing to a changeset that is a
parent of the branch you're trying to switch to, and then "hg update"ing to the
tip of that branch
  

итак, я это сделал.

 hg up -r <shared root rev>
hg up branchIwant
  

Я спросил о «почему», и мне сказали: «вам не разрешено обновлять по веткам», что сначала не имело для меня смысла. Затем я понял, что, поскольку я прошел через общий корневой каталог, он не распространяется по ветвям.

Комментарии:

1. Круто! Большое вам спасибо! Это самый простой способ зафиксировать мои изменения в другой уже существующей ветке 🙂

Ответ №3:

Я обычно использую

 hg qnew
hg qpop
hg up -c <target-rev>
hg qpush
hg qfinish qtip
  

Но я также использую подход jrwren, который довольно регулярно просматривает предка.