git: объединение ветвей объектов в более раннюю часть мастер-линии - PullRequest
1 голос
/ 11 мая 2011

Я уверен, что об этом уже спрашивали, но я даже не совсем уверен, каковы условия, которые я ищу.

У меня есть структура веток, которая выглядит следующим образом:

startoftime -> A -> B -> C -> D (master head)
                    |
                    -> X -> Y (feature1 head)(tag T)
                    |
                    -> Q -> R (feature2 head)

По сути, я создал две ветви функций из коммита B и провел в них разработку. На голове одного из них есть тег, который отражает его общую историю от исходного корня. Теперь я хочу свернуть их обратно в мастер, но в идеале я бы хотел, чтобы они появлялись в истории до нового материала на мастере, а не после, поэтому оставляю текущую головку мастера там, где она есть. В идеале я хотел бы это:

startoftime -> A -> B -> X -> Y -> Q -> R -> C -> D (master head)
                              |
                            (tag T)

Какие концепции или команды мне следует рассмотреть здесь?

Есть предположение, что rebase может быть тем, что я здесь. Все три из этих веток уже были перенесены на мой пульт, хотя я могу гарантировать, что никто, кроме меня, не вытащил из него / проверил его. Могу ли я использовать rebase?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Перебазирование не является проблемой, если никто не использовал ваши ветки. Неважно, удаленно это или нет. Вам просто нужно будет использовать --force при следующем нажатии.

При этом я хотел бы призвать вас пересмотреть только использование слияния. Ваша история будет по-прежнему отображать временную шкалу, когда были разработаны функции, но она также будет более точно отражать историю вашей параллельной работы, а также когда вы интегрировали ее в свою основную ветку. Если вы сделаете ребазинг, ваш текущий Q будет отличаться от того, который был Q, когда вы изначально работали над ним, возможно, до того момента, когда он не будет работать так, как вы ожидаете, если вам когда-нибудь придется вернуться к нему. Кроме того, это облегчает удаление feature1 или feature2, если это потребуется по какой-либо причине.

0 голосов
/ 15 ноября 2012

Просто чтобы завершить (и я согласен с Карл Билефельдт ответ ), решение с использованием rebase будет:

git checkout feature2
git rebase feature1
git checkout master
git rebase --onto feature2 B D

( См. Здесь для примера git rebase --onto)

...