Возможно ли перезаписать ветку другим?
Или это единственное решение для удаления ветки B и создания новой ветки из Branch A?
Возможно ли перезаписать ветку другим?
Или это единственное решение для удаления ветки B и создания новой ветки из Branch A?
Если вы не используете TFS 2010, я бы рекомендовал использовать Merge + Resolve для синхронизации двух ветвей.
# cancel out of conflict dialog
tf merge A B -r -force -version:T
tf resolve B -r -auto:acceptTheirs
Это должно уравнять все, кроме файлов, которые были созданы только в B и никогда не сливались обратно. Используйте Folder Diff, чтобы найти и согласовать их.
Delete + rebranch в 2005/2008 году рискует столкнуться с конфликтами пространства с кошмаром и отладкой в будущем. Другой вариант, если у вас есть 2008, - Destroy + rebranch. Очевидно, что предполагается, что вы в порядке с потерей всей истории из оригинальной копии B.
В Visual Studio 2010 я просто использовал беспочвенное слияние для достижения этого:
Tf merge/baseless [путь источника] [целевой путь]/рекурсивный
При всплывании окна конфликтов конфликтов выберите вариант "Возьмите исходную версию". Обратите внимание: файлы, которые существуют только в целевом объекте, не будут удалены с помощью беспочвенного слияния, но вы можете сравнить 2 ветки, чтобы определить разницу и удалить их вручную.
Обратитесь к: http://msdn.microsoft.com/en-us/library/bb668976.aspx
У меня был успех, используя ответ Ричарда Берга, но чувствовал, что было несколько деталей, которые отсутствовали. Именно так я смог устранить различия, связанные с разрешениями конфликтов и наборами изменений, которые не были объединены с исходным кодом и сделать цель идентичной источнику. Обратите внимание, что так я буду ссылаться на ветки - источник - тот, который не должен быть изменен, в то время как цель - то, которое должно быть идентично исходному.
tf merge $/target $/source /recursive /discard
Примечание.. Убедитесь, что рабочая папка установлена в путь в рабочей области, чтобы инструмент tf знал, какое рабочее пространство и сервер TFS использовать.
Проверьте, нет ли различий между ветвями, которые должны быть адресованы - если нет, никаких дополнительных действий не требуется.
3,1. Просмотрите историю на целевой ветке и найдите последнее полное слияние от источника до цели (игнорируйте сливки вишни, так как это приведет к множеству ложных срабатываний) - обратите внимание на номер набора изменений. Более простой альтернативой было бы выполнить слияние из ветки источника в целевую ветвь, чтобы получить последнюю версию из ветки источника в целевую ветвь.
3,2. Щелкните правой кнопкой мыши на ветке источника в проводнике исходного кода и выберите "Сравнить" в контекстном меню. Используйте только последнюю версию для источника, если вы объединили ветвь источника в целевую ветку на шаге 2.1. В противном случае выберите "Набор изменений" из исходной версии | Введите поле со списком и введите номер набора изменений с шага 2.1.
3.3. Используйте стрелку раскрывающегося списка в кнопке "Обзор" рядом с полем "Целевой путь", чтобы выбрать "Путь к серверу". Затем выберите целевую ветку в открывшемся диалоговом окне.
3.4. Нажмите OK в диалоговом окне Сравнить, чтобы выполнить сравнение.
tf merge $/source $/target /recursive /force /version:T
Примечание. спецификация версии T указывает на последнюю версию.
Закройте диалог конфликтов слияния.
Автоматически разрешать все конфликты, выбирая ветвь источника.
tf resolve $/target /recursive -auto:TakeTheirs
Заезд.
Подтвердите, что больше нет кандидатов для слияния с целью к источнику и что между двумя ветвями нет различий (на этот раз только с использованием последних версий, поскольку мы сделали принудительное слияние последней версии на этапе 4).
См. MSDN для получения более подробной информации о tf merge и решить.
Удалите ветвь B и создайте новую из ветки A.
Есть ли причина, по которой вы не хотите этого делать?