Итак, моя история выглядит так:
o---o---o---o master
\
o---o---o A
\
o B
Итак, чтобы объяснить:
- У меня есть ветвь
A
, которая была запущена изmaster
- У меня есть ветвь
B
(только с 1 фиксацией), которая была запущена изA
Я хочу это:
o---o---o---o master
\
o---o---o A
\
o B
Что я сделал:
1).
git checkout A
git rebase master
Это привело к множеству конфликтов, которые после некоторого значительного времени, потраченного на исправление, возникли:
o---o---o---o master
\
o---o---o A
Это именно то, что я хотел.
(я не знаю, где B
сейчас)
2).
После этого я сделал много сквотов и изменил порядок фиксаций на A
, чтобы история выглядела так, как будто я хочу.
3).
Теперь я также хочу:
git checkout B
git rebase A
Однако это не работает, и я не знаю, почему. Если я делаю git log
, я вижу коммиты, которые были там до того, как я сделал шаг 1.
Кроме того, я получаю такое же огромное количество конфликтов, которые я уже решил на шаге 1. Я потратил значительное время на это, не хочу делать это снова.
Этот пример предложил использовать --onto
, который я сделал:
git checkout B
git rebase --onto A
Но это полностью удаляет фиксацию на B
и делает A
и B
указывать на то же самое commit, то есть последнее на A
.
Мой вопрос: Как я могу эффективно сбрасывать B с A так, чтобы он выглядел так, как B начинался с A? (что в действительности было истинным в начале).
Мое лучшее предположение, что я использую --onto
неправильно. Или что я должен использовать что-то еще (например, cherry-pick
).