Есть ли способ перенести одну фиксацию из ветки в другую?
У меня такая структура веток:
-- -- -- -- -- (Master)
\
-- -- -- -- -- XX (Feature-branch)
Все, что я хочу сделать, это переустановить последний коммит Feature-branch
на master и откатить Feature-branch
один коммит.
-- -- -- -- -- XX (Master)
\
-- -- -- -- -- (Feature-branch)
Как я могу это сделать?
Ответы:
Вы можете выбрать XX, чтобы освоить.
И удалите последний коммит из ветки функций с помощью git reset.
источник
cherry-pick
они выглядели так, как будто они были удалены из старого местоположения и созданы в новом месте. Я полагаю, что rebase позаботится об этом, но к настоящему времени я продвинулся вверх по течению, поэтому я не могу это проверить. В любом случае будьте осторожны, если у вас возникнет подобная ситуация.Feature-branch
origin, вам нужно это сделать, такgit push -f origin Feature-branch
какFeature-branch
теперь считается, что за вами стоит 1 фиксацияorigin/Feature-branch
.Это говорит: «переустановить диапазон коммитов между последней перед веткой и веткой (то есть XX фиксацией) на кончике основной ветки»
После этой операции
branch
подсказка перемещается в фиксациюXX
, поэтому вы хотите вернуть ее с помощьюВ котором говорится: «сбросить кончик ветки до фиксации до его предыдущего состояния»
Так что вишня - более простое решение ...
источник
--onto
поэтому я могу делать что-то не так. Кстати, ОП сказал перебазирование, но похоже, что он хочет сделать вишневый выбор.На самом деле это довольно просто сделать. Решение состоит в том, чтобы выполнить интерактивную перебазировку и «отбросить» все коммиты, которые вы не хотите включать в перебазирование.
git rebase -i <target_branch>
гдеtarget_branch
находится ветка, на которую вы хотите переустановитьЗатем вы отредактируете открытый файл и
pick
коммиты, которые вам нужны, иdrop
(илиd
для краткости) все коммиты, которые вы не хотите брать с собой.источник
Ответ @Charles правильный. Во всяком случае, я использовал это так много раз, прежде всего, чтобы перенастроить конкретную конфигурацию в проекте.
что я создаю для него новую команду:
обычно вы хотите автоматически заполнять имена веток для этой команды, поэтому добавьте ее в источник этой функции (добавив в .bashrc или .profile):
git autocomplete будет искать его
вы можете использовать эту команду так:
Когда вы правильно разделяете функции, возможности безграничны.
Думаю, это то, что любят делать люди, занимающиеся лоскутным одеялом .
эта команда будет работать в любом случае с любым предоставленным вами sha / ref:
источник
Вот еще вариант:
Команды выглядят так:
Это не команда rebase, нет, но это по духу rebase.
источник