LINUX.ORG.RU

Ошибки при rebase. Как побороть?

 


0

1

Всем привет!

Склонировал я когда-то 3.3 ядро для использования в одном приборе. Потихоньку пришлось некоторые вещи подрихтовать для себя. Соответственно появились десятка два моих коммитов на 3.3 основе. Между делом появились 3.3.1 - 3.3.8. Я перенёс свои изменения на эти ядра с чем-то вроде «git fetch stable» + «git rebase 3.3.8». Всё работало на Ура. Вот сейчас хочу перенести свои коммиты на 3.7 ядро. При этом получаю ошибку mergА в файле, который никогда не трогал:

velik@work:/home/Developer/Work/trunk/Kernel$ git rebase v3.7
First, rewinding head to replay your work on top of it...
Applying: staging: android/lowmemorykiller: Don't unregister notifier from atomic context
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging drivers/staging/android/lowmemorykiller.c
CONFLICT (content): Merge conflict in drivers/staging/android/lowmemorykiller.c
Failed to merge in the changes.
Patch failed at 0001 staging: android/lowmemorykiller: Don't unregister notifier from atomic context

Такое ощущение, что гит отматывает не только мои коммиты на 3.3 ветке, а гораздо дальше... Кто-то с таким уже встречался? Как можно побороть? И немного другой вопрос, но из этой же темы: Есть ли возможность в git rebase указать, что я хочу перенести не все мои коммиты с 3.3 ветки на 3.7, а, допустим, только два последних?

Всем спасибо velik


Ответ на: комментарий от Jetty

А зачем?
Все свои изменения выделяем в отдельную ветку, которую мержим с нужной версией ядра. Или так не получится?

trex6 ★★★★★ ()
Ответ на: комментарий от Jetty

Так человеку и нужно свои патчи применить к разным версиям ядер.
Вот он и будет мержить свою ветку с разными версиями.
Зачем тут rebase я так и не понял.

trex6 ★★★★★ ()
Ответ на: комментарий от Jetty

При чем тут все патчи из 3.3.8?
Изначально было ядро 3.3, к нему дополнялись какие-то коммиты. Эти коммиты можно было бы расположить в отдельной ветке и мержить ее со всеми ядрами старше 3.3

При чем тут 3.3.8?

trex6 ★★★★★ ()
Ответ на: комментарий от Jetty

А вы хотите сказать, что часть коммитов из ветки 3.3 не вошли в 3.7?

Еще раз хочу обратить ваше внимание, что я не пытаюсь что-то посоветовать в конкретной ситуации, а задаюсь вопросом, почему решено было использовать rebase, вместо отдельной ветки с набором патчей.

trex6 ★★★★★ ()
Ответ на: комментарий от trex6

А вы хотите сказать, что часть коммитов из ветки 3.3 не вошли в 3.7?

Я этого не знаю наверняка, но думаю что в 3.3.8 сущесвует много 3.3 специфических комитов.

Еще раз хочу обратить ваше внимание, что я не пытаюсь что-то посоветовать в конкретной ситуации, а задаюсь вопросом, почему решено было использовать rebase, вместо отдельной ветки с набором патчей.

Еще раз: отдельная ветка это <база> + <патчи>,
где
база - ванильный комит, в нашем случае 3.3.8
патчи - какая-то работа поверх 3.3.8

Если мержить эту ветку на 3.7, то будут смержены _все_ патчи из <базa> и <патчи>...

Jetty ★★★★★ ()
Ответ на: комментарий от Jetty

да, это идея. может эти патчи и не катят. можно будет попробовать завтра на работе сделать rebase обратно на 3.3, а потом на 3.7. Если 3.7 отвели от 3.3, то должно сработать.

velikS ()
Ответ на: комментарий от Jetty

ТС изначально каким-то очень хитрым путем пошел.
Вот я и хотел понять, зачем он так поступил. Ведь изначально у него был чистый 3.3.

trex6 ★★★★★ ()
Последнее исправление: trex6 (всего исправлений: 1)
Ответ на: комментарий от trex6

Ну вот и появилось немного времени ))

На мой взгляд собирать свои изменения в отдельной ветке, а потом мержить (как это по-русски? ;-) ) их на основное ядро +- весьма непрактикабельный workflow (как это по-русски? ;-) ). Просто представьте себе как это выглядит: Отвёл ветку (скажем my_kernel_features) для своих коммитов, сделал коммит, переключился на «чистый» master с, к примеру, 3.3.7, смержил, собрал ядро в master, обнаружил, что надо добавить новый коммит в my_kernel_features, переключился, добавил, опять переключился на на «чистый» master, смержил и т.п. Мне кажется, что это - чистой воды мазахизм. Про то, как будет выглядеть history, лучше вообще промолчать. С rebase мне не надо делать лишний телодвижений, не надо вести ненужную по сути ветку. Я работаю в своей одной единственной ветке со своими коммитами на базе того же 3.3.7. Да, я делаю локальные ветки для отработки каких-то фич. Но после того, как фича готова, мержу её на свою основную и часто чищу историю разработки этой фичи с git rebase squash чтоб получить один единственный коммит.

Как-то так )) Если хотите делать, как вы описали, пожалуйста, гит весьма гибкая штука...

velikS ()

Если вы находитесь в ветке my_features и делаете команду «git rebase v3.7», то:

Если ситуация такая, то должно работать:

                 o --- v3.7
                /
v3.3 --- o --- o --- o --- v3.8
          \
           o --- o --- my_features

А если такая, то наверное не будет:


           o --- v3.7
          /
v3.3 --- o --- o --- v3.8 --- o --- my_features

В первом случае my_features - это 3.3 + ваши изменения.

Во вотором случае my_features - результат rebase ваших изменений относительно 3.8, то есть включает в себя изменения 3.8,
которые не обязательно возможно перенести на 3.7, как писали выше.

Есть ли возможность в git rebase указать, что я хочу перенести не все мои коммиты с 3.3 ветки на 3.7, а, допустим, только два последних?

git rebase -i, git cherry-pick

gv ()
Ответ на: комментарий от gv

Супер, большое спасибо за идеи, доберусь до работы, попробую и отпишусь

velikS ()
Ответ на: комментарий от quest

может попробовать просто руками все патчи накатить через patch?

Спасибо, эта идея у меня была. git format-patch + git apply точно сработают. Но хотелось сперва узнать, нет ли альтернативного «человеческого» варианта...

velikS ()
Ответ на: комментарий от unC0Rr

мержить (как это по-русски? ;-) )

сливать (слияние)?

Да, точно! Вот что значит - читать книжки без перевода )))

velikS ()
Ответ на: комментарий от Jetty

git rebase --onto linux-3.7 linux-3.3.8 linux-3.3.8_with_patches

Привет, если кому еще интересно, то этот вариант рабочий. Перенес я свой 3.3.8 на 3.7.1. Пришлось, правда, помучаться со слияниями. Но в этот раз конфликты были уже исключительно в файлах, которые я менял :)

Ещё раз Спасибо, Velik

velikS ()

Есть ли возможность в git rebase указать, что я хочу перенести не все мои коммиты с 3.3 ветки на 3.7, а, допустим, только два последних?

git rebase -i

VirRaa ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.