Вот как это сделать с помощью инструмента командной строки. Я предполагаю, что это может быть легко сопоставлено с TortoiseHg (хотя я не уверен, так как я никогда не использую это ...) В любом случае, так как это должно быть сделано только время от времени, я думаю, что здесь нет проблем с использованием терминала .
Пример настройки
Предположим, что ваш удаленный репозиторий выглядит примерно так:
@ changeset: 3:a4c18a1fba12
| tag: tip
| summary: commit 4
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
Локально, у вас не было коммита 4, поэтому вы зафиксировали что-то непосредственно над коммитом 3:
@ changeset: 3:39526003350f
| tag: tip
| summary: commit 4 made locally
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
Итак, вы пытаетесь подтолкнуть его и получите это сообщение:
$ hg push
pushing to ssh://hg@bitbucket.org/brandizzi/mercurial-test-repo
searching for changes
remote has heads on branch 'default' that are not known locally: a4c18a1fba12
abort: push creates new remote head 39526003350f!
(pull and merge or see "hg help push" for details about pushing new heads)
По запросу, вы тянете его:
$ hg pull
pulling from ssh://hg@bitbucket.org/brandizzi/mercurial-test-repo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
У тебя это сейчас ...
o changeset: 4:a4c18a1fba12
| summary: commit 4
|
| @ changeset: 3:39526003350f
|/ summary: commit 4 made locally
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
... но вы не хотели бы объединяться в соответствии с просьбой. Вы хотите иметь это вместо:
o changeset: 4:a4c18a1fba12
| summary: commit 4 made locally
|
o changeset: 3:a4c18a1fba12
| summary: commit 4
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
А затем вы хотите отправить его в удаленное хранилище.
Как ты это понял?
Решение
Чтобы получить это, вы не можете выдвинуть "коммит 4, сделанный локально". Кроме того, нет возможности поставить его после , когда новый удаленный коммит фиксируется. Сказал, что мы можем получить то, что мы просили.
Сказал, что вам просто нужно перенести локальный коммит на новый удаленный коммит:
$ hg rebase --source 3 --dest 4
Если вам повезет, этого будет достаточно.
Обработка конфликтов
Если вам не повезло, у вас могут возникнуть конфликты:
$ hg rebase --source 3 --dest 4
rebasing 3:39526003350f "commit 4 made locally"
merging test.txt
warning: conflicts while merging test.txt! (edit, then use 'hg resolve --mark')
unresolved conflicts (see hg resolve, then hg rebase --continue)
Затем просто разрешите конфликты (отредактировав их вручную):
$ hg st
M test.txt
$ nano test.txt # Edit and save
... пометить файл как разрешенный ...
$ hg resolve --mark
(no more unresolved files)
continue: hg rebase --continue
... и продолжить перебазирование:
$ hg rebase --continue
rebasing 3:39526003350f "commit 4 made locally"
saved backup bundle to /home/adam/software/mercurial-test-repo/.hg/strip-backup/39526003350f-64863882-backup.hg
Вот ваша новая история:
@ changeset: 4:ca31fe8a15f0
| summary: commit 4 made locally
|
o changeset: 3:a4c18a1fba12
| summary: commit 4
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
Теперь нажмите на нее:
$ hg push
pushing to ssh://hg@bitbucket.org/brandizzi/mercurial-test-repo
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
В те дни это не так сложно, как раньше, верно? :)