Git Rebase Include Specifi c Коммиты - PullRequest
0 голосов
/ 29 мая 2020
Foo:
A-O-X-Y-Z
Bar:
A-B-C-D

Я хочу понять, какова правильная стратегия для этого. Когда я выполняю перебазирование ветки Foo против Bar, я получаю следующий результат ветки.

I ran:
git checkout Foo
git rebase Bar
# fix merge errors and push

Resulting Foo branch:
A-B-C-D-O-X-Y-Z

Я пытаюсь спросить, можно ли перебазировать и включить только определенный c набор совершает (X, Y, Z)? Я хочу добиться этого, чтобы исключить фиксацию "O".

Desired Result:
A-B-C-D-X-Y-Z

1 Ответ

1 голос
/ 29 мая 2020

Легко достичь желаемого результата. Вам нужна следующая команда:

git rebase --onto Bar Foo~3 Foo

Эта форма rebase, которая принимает две ссылки в качестве аргументов (пока игнорируйте --onto Bar), является ярлыком для следующих двух команд:

git checkout Foo
git rebase --onto Bar Foo~3

Как это работает

Без --onto Bar приведенная выше команда rebase получает коммиты из текущей ветки (Foo), которые недоступны из Foo~3, и сохраняет их во временной области. . Затем он сбрасывает текущую ветвь на Foo~3 и применяет сохраненные коммиты один за другим в их исходном порядке.

С --onto Bar сохранение и восстановление коммитов происходит таким же образом, но начинается восстановление. поверх фиксации, обозначенной Bar вместо Foo~3.

В целом, приведенная выше команда берет последние 3 фиксации из ветки Foo (вместе с веткой Foo) и помещает их поверх фиксации, идентифицируемой Bar.

Предупреждение!

Если после того, как вы запустите эту команду, фиксация O не будет доступна, начиная с ветки, она исчезнет из истории. Снимается не сразу. Вы все еще можете получить к нему доступ, если знаете его ha sh или проверив вывод git reflog. Git удалит его полностью через некоторое время (обычно около двух недель), если он больше не доступен с помощью ветки, тега или журнала ссылок.

Фактически, сразу ничего не удаляется; даже коммиты, которые git rebase «перемещены» из одной ветки в другую, были фактически скопированы, а оригиналы все еще находятся в репозитории и доступны, но не видны.

Подробнее о git rebase на сайте Git или запустите git help rebase на своем терминале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...