Как скопировать фиксацию из одной ветки в другую в git без слияния?
У меня есть 2 ветки - мастер и экспериментальный. A показано:
master-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-Y
\
-x-x-x-x
Мой эксперимент довольно устарел, и я надеялся обновить его, просто скопировав последнюю фиксацию в основной ветке (Y) на экспериментальный:
master-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-Y
\
-x-x-x-x-Y
Если возможно, я не хочу делать какое-либо слияние, я хочу переписать что-либо в экспериментальном (главный - мой главный приоритет).
Edit:
Позвольте мне вкратце объяснить ситуацию: когда я пытаюсь объединить фиксации на кончиках мастера и экспериментальной ветки, я получаю много конфликтов слияния! То же самое происходит, если я попытаюсь вылезть из эксперимента на мастера! Я надеялся избежать их, потому что я просто не хочу никаких изменений экспериментального! До сих пор я вишневый сбор от мастера к экспериментальному, и когда есть конфликты слияния, я просто сохраняю изменения в мастер-ветке. Но после этого много раз, я надеялся, что может быть какой-то способ, в котором я могу сделать что-то вроде слияния, за исключением того, где (я не запрашиваю никаких конфликтов слияния, поскольку основные изменения - все, что мне нужно (для всех я знайте, что неважно, что было ранее на экспериментальной ветке!
Ответы
Ответ 1
Вот что я изначально пробовал!:
git checkout experimental
git rebase --onto <COMMIT ID OF LAST MASTER COMMIT> experimental
При попытке этого кода я обнаружил, что не только фиксация на кончике мастера , но также вся экспериментальная ветка стала клоном мастера! Да, это не элегантное решение и плохое использование git!
Однако, как указано в @Johnsyweb, оптимальным решением было бы слияние экспериментальных и мастерских , но
с Git предпочтительнее принимать изменения на мастере над изменениями на экспериментальном уровне
Следовательно, выполните:
git checkout experimental
git merge -Xtheirs master
должен работать нормально.
Хотя он говорит о слиянии, поскольку он рассматривает изменения экспериментальной ветки над мастером, это больше похоже на копию экспериментального мастера для всех практических целей.
(См. Аналогичное обсуждение здесь)
Ответ 2
В cherry-pick просто зафиксировать Y
с master
на experimental
:
git checkout experimental
git cherry-pick Y
В качестве альтернативы:
git checkout experimental
git cherry-pick master
... Применит изменение, введенное фиксацией в конце ветки master
, и создаст новую фиксацию в experimental
с этим изменением.