Mercurial: есть ли способ «объединить и отменить изменения»? - PullRequest
21 голосов
/ 19 сентября 2011

У меня есть графлог, который выглядит примерно так:

(snip)
  | |
  | o    1) Other Dev: Commit
  | | \
  o | |  2) Me: Commit
/ | | |
| | o |  3) Other Dev: Commits with an error
| |/| |
| o |/   4) Me: Merge and commit
|  /|    
|/  |
o   |    5) Me: Realize there were bugs in the commit and take earlier version to merge with
|   o    6) Other Dev: Fixes error
o /      7) Me: committing some changes
|/
o        8) Me: Merge fixed tip

В (8) все так, как и должно быть, за исключением свисающей дополнительной головки в (4). Чтобы избавиться от него, мне нужно объединить (4) -.-> (8), но, поскольку в (4) нет ничего, что мне нужно, я могу смело отменить все его изменения. Я мог бы сделать это слияние вручную файл за файлом (и, как правило, это не так уж важно), но для моего собственного назидания - есть ли простой однострочный способ сказать «слияние (4) с (8) и всегда взять (8) "?

1 Ответ

35 голосов
/ 19 сентября 2011

Да.Встроенный инструмент слияния internal:local.

$ hg merge 4 --tool internal:local

Аналогично есть internal:other, который выбирает другую версию файлов как объединенную версию.

Вот пример, чтобы прояснить, что происходит, запуститеотключить репо с одним файлом:

$ echo a >> a
$ hg ci -Am.
adding a
$ echo a >> a
$ hg ci -Am.

Разветвить его и поставить конфликт в a:

$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo b >> a

Также добавить еще один файл только в объединенную ветку:

$ echo b >> b
$ hg ci -Am.
adding b
created new head

Вернитесь назад и объедините анонимную голову:

$ hg up 1
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg merge 2 --tool internal:local
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

Естественно, в этот момент без инструмента объединения мы получим конфликт на a.Но, используя инструмент слияния, мы говорим Mercurial брать версию первого родителя для каждого файла, к которому также относится слияние с cset.

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