Перебазирование зависимых тематических веток

Я использую много локальных веток тем в git, и иногда возникают зависимости между ветками тем, вызывающие проблемы с перебазированием. Например, с такой структурой:

master ---> featureA ---> featureB
                     \--> featureC

Если master изменяется, и я получаю (и разрешаю) конфликты при перемещении featureA, то последующее перемещение featureB на featureA вызывает те же конфликты (а иногда и новые захватывающие), потому что он пытается повторно применить исправления из ветки featureA. Предполагая, что фактические патчи между featureA и featureB будут применяться безошибочно, если они выбраны вишневыми, есть ли способ выполнить перебазирование в этой ситуации примерно с тем же эффектом, что и вишневый выбор всех коммитов между featureA и featureB?


person Kai    schedule 10.10.2009    source источник
comment
См. также как я бы перебазировал всю подисторию - несколько ветвей, с некоторыми связями между ними в результате слияния. Неприятной частью этого решения является необходимость впоследствии сбрасывать ссылки ветки темы на новые перебазированные коммиты.   -  person imz -- Ivan Zakharyaschev    schedule 15.03.2012


Ответы (2)


После перебазирования featureA вы можете сделать

git rebase --onto featureA oldFeatureA featureB

предполагая, что oldFeatureA представляет фиксацию на кончике featureA до того, как вы ее перебазировали (вы можете либо оставить там другую ветку, либо просто запомнить хэш фиксации).

В основном это должно быть то же самое, что и выборка каждой фиксации между A и B на перебазированную версию A.

Документация по git-rebase (включает некоторые полезные графические пояснения того, что происходит во время некоторых более сложных операций перебазирования операции)

person Phil    schedule 10.10.2009
comment
Отлично, спасибо. Я понял, что --onto выглядит так, как будто он должен работать, но использовать старый наконечник в качестве основы мне не приходило в голову. - person Kai; 10.10.2009
comment
Вместо oldFeatureA должна быть возможность использовать featureA@{1}, предполагая, что перебазирование было последним изменением в этой ветке. В противном случае используйте что-то вроде @{2}, @{3} или @{one hour ago}. - person Ropez; 25.06.2010

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

См., например. topgit означает, что не нужно ждать отзывов сообщения в блоге.

person Jakub Narębski    schedule 10.10.2009
comment
Спасибо, что указали на TopGit! TopGit, кажется, стремится к правильной цели: поддерживать взаимозависимые ветки. Но есть ли в TopGit функция перебазирования моих взаимозависимых тематических веток в новое исходное состояние? Если бы это было возможно, я мог бы использовать TopGit для разработки и подготовки своих исправлений в качестве веток для проверки и возможного извлечения исходной веткой. . - person imz -- Ivan Zakharyaschev; 15.03.2012
comment
См. также обсуждение TopGit на основе перебазирования: думаю, что новая «система» должна быть основана на «перебазировании», а не на основе слияния, как TopGit - person imz -- Ivan Zakharyaschev; 15.03.2012