Переместить прошедшие Mercurial коммиты в другую ветку - PullRequest
1 голос
/ 18 апреля 2019
1 -- 2 -- 3 --------- 7     C
 \         \- 4      /      B
  \------------5----/       A

Я закончил с ветвящейся структурой выше в моем ртутном репозитории. То, что я действительно хочу, чтобы коммиты 2 и 3 были в ветви B, как показано ниже:

1 -- 2 -- 3 -- 4  B
 \ ------------5  A

Есть ли хороший способ получить эту структуру задним числом?

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Я немного не согласен с ответом DaveInCaz , но в итоге согласен с выводом : вы сможете жить с тем, что имеете;все в порядке.

Технически, в Mercurial, когда вы делаете коммит, он находится на ровно на одной ветви , а ветвь, на которой он находится, - это одна ветка , на которой вы были когда ты это сделал.Так что, если вы были на ветке C и сделали коммиты 2 и 3, коммиты 2 и 3 находятся на ветке C, сейчас и навсегда.

Но это не имеет значения с точки зрения выполнения работы,Коммит 4 находится в ветви B, а родительский коммит 4 - коммит 3, родитель которого - коммит 2.Тот факт, что они находятся в какой-то другой ветке, обычно не важен.

(Эта установка довольно сильно отличается от Git: в Git коммиты находятся на всех ветвях, из которых они достижимы.Имена подсказок веток могут создаваться и уничтожаться в любое время, указывая на любой существующий коммит. Это означает, что набор веток, которые некоторые коммиты изменяют от одного дня к другому. В действительности, имена веток в Git лишены какого-либо внутреннего значенияВы можете добавлять, удалять или изменять любое имя в любое время. коммиты не меняются, но набор имен ветвей, которые достигают их делают.)

Если по какой-то причине, например, какому-то внешнему инструменту, требующему, чтобы ветвь name коммитов была B, а не C, - вы действительно хотите или должны переместить эти коммиты, ответ будетчто вы не можете на самом деле перемещать их вообще, но вы можете копировать их:

C: 1 -- 2 -- 3 --------- 7
B:  \         \- 4      /
A:   \------------5----/

может стать:

C: 1 -- 2 -- 3 ------------------ 7
   |\         \                  /
 B | \         4                /
B: |  \                        /
 B |   -------- 2b - 3b - 4b  /
    \                        /
A:   ---------------------- 5

Обратите внимание, что полицейскийОт 2 до 2b и 3 до 3b, теперь вы также должны скопировать 4 в 4b4, и 4b находятся на ветке B, а ветка B теперь имеет две головки.

Как отметил DaveInCaz, вы можете удалить нежелательные коммиты.Если они существуют в каком-то другом клоне, с которым вы разговариваете, они будут возвращаться каждый раз, когда вы говорите с этим клоном, если только вы не уберете их там .

0 голосов
/ 18 апреля 2019

У вас уже есть структура, которую вы хотите, за исключением того, что поверх нее было добавлено 7.

Если 7 нигде не была перемещена (или, по крайней мере, ни в какие клоны, которые вы не контролируете)вы можете просто hg strip это.

Если 7 было открыто передано, вы больше не можете удалить его с помощью strip, потому что другие клоны все еще будут иметь его.Но вы можете проигнорировать это, и просто продолжайте работать с 4 или 5, как вам угодно.Не нужно вносить изменения, если в качестве родителя 7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...