Git: как использовать rebase с их стратегией
В принципе, я просто хочу (re) установить родительский (пусть скажем, commit A
) конкретного commit (commit B
), который является корневым фиксацией какой-либо ветки x
. Здесь предлагается в одном из ответов, который я могу сделать с помощью трансплантатов. Я попробую это позже, может быть, это лучший способ.
Однако, прежде чем читать это, я подумал, что это должно быть возможно через rebase
. Но поскольку родительский commit A
немного отличается от B
, и я просто хочу оставить целую ветвь x
так, как она есть, только с установкой родителя на свой корневой фиксатор B
, я думал, что могу использовать стратегия theirs
, которая, похоже, не существует. Я наткнулся на это раньше (и думал, что это ошибка или моя установка Git), и всегда просто работаю, переключая ветки и используя стратегию ours
. Однако при rebase
в этом случае я вынужден использовать стратегию theirs
.
Моя команда выглядит так:
git rebase -s theirs --onto A --root x x--rebased
Ответы
Ответ 1
rebase не предназначен для того, что вы хотите сделать. Другой плакат был правильным; то, что вы хотите сделать, это настроить трансплантат, чтобы прикрепить B к A, а затем запустить git filter-branch
, чтобы испечь его в фиксации. Пример этого точного варианта использования можно найти в git filter-branch
manpage.
Ответ 2
Я не совсем уверен, что понимаю ваш вопрос, но если ваша цель - это:
o C (X)
|
o B
o A
Код>
:
o C '(X)
|
o B '
|
o A
Код>
затем git replace --graft B A
должен делать то, что вы хотите.
N.B. B
и B '
имеют одинаковые файлы, как и другие, но разные хеши-хэты, потому что их родительские коммиты отличаются. Аналогично C
и C '
.
Почему это нужно сделать с помощью git replace -graft
, а не git rebase -s theirs
, я не знаю. Предположительно это для истерического изюма.
Также см.: этот ответ до Как git трансплантаты и замена отличаются? (Сейчас ли перегибы теперь устарели?).