Как скопировать фиксацию из одной ветки в другую в 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 с этим изменением.