Как мне перебазировать поддерево? - PullRequest
1 голос
/ 13 февраля 2020

Я экспериментирую с Git поддеревом и мне нужна помощь.

У меня есть репо A с поддеревом, сгенерированным из репо восходящего потока B, в папке A/b. В апстриме есть файл B/x, и я вижу, что эквивалентный файл A/b/x существует и обновлен. Если я сначала изменю исходный файл A/b/x и нижестоящий файл B/x, когда я вызываю git subtree push ..., я получаю конфликт слияния, как и ожидалось.

Я могу сделать git subtree pull ..., который выполняет слияние, которое применяется к моему B/x редактированию. Я бы предпочел сделать операцию rebase, где мое изменение на B/x применено к редактированию A/b/x.

Как я могу это сделать?

1 Ответ

0 голосов
/ 21 февраля 2020

Git поддерево не поддерживает перебазирование (как один из двух методов "интеграции" изменений: перебазировка или слияние). Существует один TODO , в котором упоминается rebase, но я думаю, что он находится в другом контексте.

Команда извлечения поддерева даже не выдает команду git pull, но разделяет ее на две части. необходимые команды, fetch + merge или я бы предложил переопределить стратегию интеграции по умолчанию для pull (pull.rebase).

https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh#L870

Если я правильно понимаю ваш сценарий, Я думаю, вам следует избегать изменения B/x непосредственно в своем хранилище. Поддерево позволяет вам изменять A/b/x и использовать subtree push для отправки изменений на удаленный поддерево.

В любом случае, поддерево на самом деле не «перебазировано». Вы всегда можете перебазировать пульт дистанционного управления B напрямую, но вам все равно нужно объединить несвязанные истории в A. Это сложно, и для меня, кажется, требуется интерактивная перебазировка.

...