Mercurial: как удалить строку в файле, для последних 4 наборов изменений (еще не передано)? - PullRequest
0 голосов
/ 12 июля 2010

У меня есть локальное хранилище Mercurial с 5 коммитами, которые все еще нужно отправить на сервер. Однако я случайно включил строку в два конкретных файла, так как последние 4 коммита, которые я действительно не хочу иметь там (ни в одном из наборов изменений).

Есть ли практический способ удалить эти строки в этих двух файлах? (кроме удаления моего локального репозитория, клонирования копии сервера и повторного применения всех изменений вручную)

Ответы [ 2 ]

6 голосов
/ 12 июля 2010

Вы получите много разных предложений (mq, histedit, import / export), которые по сути делают одно и то же. И все они будут чувствовать себя неуклюже, потому что Mercurial построен вокруг концепции неизменной истории - изменение истории должно быть трудным. Тем не менее, как вы правильно понимаете, если вы еще не нажали csets, это возможно. Вот процедура, которую я бы использовал - я предпочитаю ее, потому что она не требует никаких расширений:

hg export --git -o ../all-five-csets.patch 0:tip
cd .. # exit the repo
vi all-five-csets.patch # delete the line manually each time it appears (probably only once)
hg init newrepo
cd newrepo
hg import ../all-five-csets.patch
cd ..
mv repo was-repo
mv newrepo repo

Все, что там происходит, это вы экспортируете csets в текстовые представления самих себя. Создание нового пустого репо, а затем повторный импорт csets. Я сделал все из них, потому что у вас есть только пять. Если бы вы смотрели на изменение последних 5 из 500, я бы создал newrepo, выполнив clone -r, который клонирует «до точки», а затем применил наборы, которые я оставил в их отредактированной форме через импорт. 1005 *

1 голос
/ 18 июля 2010

Если для этих 5 коммитов не важно быть независимыми наборами изменений, вы используете hg collapse , чтобы свернуть их в один набор изменений, который не содержит тех строк, которые вы хотите избежать нажатия.Т.е.

  • Удалите строки, которые вы не хотели включать, затем передайте это изменение
  • Используйте hg collapse, чтобы свернуть последние 6 наборов изменений (существующие 5 локальных, плюсваша новая, которая просто удаляет эти строки)

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

Слово предупреждения, будьте осторожны с использованием hg collapse - вы должны быть уверены, что не сверните наборы изменений, которые уже были перенесены в другой репозиторий.

...