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 , Я не знаю. Предположительно это для истерического изюма.

Также см.: ответ на вопрос " Чем отличаются мерзавцы и их замена? (Сейчас трансплантаты устарели?).

Другие вопросы по тегам