Git: как использовать rebase со своей стратегией - PullRequest
2 голосов
/ 22 мая 2011

По сути, я просто хочу (пере) установить родителя (скажем, для фиксации A) определенного коммита (commit B), который является корневым коммитом некоторой ветви x. Здесь предлагается здесь в одном из ответов, что я могу сделать это с помощью прививки. Я попробую это позже, может быть, это лучший способ.

Однако, прежде чем читать это, я подумал, что это должно быть возможно через rebase. Но поскольку родительский коммит A немного отличается от B, и я просто хочу оставить всю ветку x такой, какой она есть, просто установив родительский элемент в свой корневой коммит B, я подумал, что мог бы использовать стратегия theirs - которой, похоже, не существует. Я сталкивался с этим ранее (и думал, что это ошибка или в моей установке Git) и всегда просто обходил пути, переключая ветки и используя стратегию ours. Однако с rebase я вынужден использовать стратегию theirs в этом случае.

Моя команда выглядит так:

git rebase -s theirs --onto A --root x x--rebased

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

rebase не предназначен для того, что вы хотите сделать. Другой плакат был правильным; то, что вы хотите сделать, это установить трансплантат, чтобы прикрепить B к A, а затем запустить git filter-branch, чтобы запечь его в коммитах. Пример этого точного варианта использования можно найти в git filter-branch manpage .

0 голосов
/ 11 апреля 2018

Я не совсем уверен, что понимаю ваш вопрос, но если ваша цель - уйти от этого:

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

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

...