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