Самое простое и быстрое решение - это то, которое вы уже разработали.Вы можете комбинировать шаги 1 и 2
git rebase master feature/2
, и вам может быть проще избежать работы с идентификаторами коммитов, в случаях (например, в вашем примере), где легко вычислить выражение для целевого коммита
git branch -f feature/1 feature/2^
Вы можете, как уже упоминали другие, использовать две перебазировки.Однако это не проще.То есть, является ли сложность команд более простой, это вопрос мнения;но то, что вы говорите Git делать объективно сложнее.И как следствие этого, есть больше возможностей для вещей пойти не так, как надо.Например, конкретный метод перебазирования feature/1
, а затем перебазирования feature/2
вместо feature/1
основан на обнаружении дублирующих идентификаторов патчей во время 2-й перебазировки, которая неудачным образом завершится неудачей, если какое-либо разрешение конфликта произошло в течение 1-гоперебазироваться.Если вы действительно хотите использовать подход с 2-ребазированием, я бы рекомендовал, чтобы 2-й ребаз был выполнен как
git rebase --onto feature/1 feature/1@{1} feature/2
, поскольку это позволяет избежать даже переписывания коммитов feature/1
.(feature/1@{1}
- это запись reflog, которая указывает на feature/1
до того, как она была перебазирована.) Но тогда вы используете менее распространенный синтаксис rebase, который, насколько я могу судить, по крайней мере, не так прост, какВы делали в первую очередь.
В качестве альтернативы вы можете использовать --fork-point
, чтобы заставить git автоматически интерпретировать reflog и попытаться выяснить, какие коммиты будут дупсами.
git rebase --fork-point feature/1 feature/2
До тех пор, пока вы выполняете обе перебазировки почти в одно и то же время на одном и том же клоне, это будет работать большую часть времени .Но это добавляет больше сложности (в форме «магии», которую делает git под капотом), поэтому вам нужно понять, что это может пойти не так, и если он действительно либо (а) знает достаточно о том, что он пыталсясделать, чтобы диагностировать проблему, или (b) отступить и использовать один из других методов.