В Subversion легко слить ряд изменений/разностей из ветки с помощью "svn merge -r a: b mybranch". Но в git я обнаружил, что только вишня может выбрать одну фиксацию из ветки, чтобы применить этот патч к моей текущей рабочей ветке. Так что мне интересно, есть ли быстрый способ применить все коммиты одним махом между двумя тегами в ветке bugfix до текущей текущей ветки?
Каков наилучший способ git исправить поддиапазон ветки?
Ответ 1
Самый простой способ выполнить действие, которое вы ищете, - git rebase
. Вот рецепт. Предположим, что тег A является фиксацией, поверх которой выбирается серия патчей, которую вы хотите выбрать, и что тег B является фиксацией последнего патча в серии. Также предположим, что br - это имя текущей ветки и ветки, где должна применяться новая серия патчей.
# Checkout a new temporary branch at the current location
git checkout -b tmp
# Move the br branch to the head of the new patchset
git branch -f br B
# Rebase the patchset onto tmp, the old location of br
git rebase --onto tmp A br
Ответ 2
Самый простой способ найти это:
git cherry-pick starthash..endhash
обратите внимание, что две точки не имеют пробелов, разделяющих их на метки хэшей.
Ответ 3
Насколько я знаю, вы не можете git слить этот путь. Слияние предназначено для объединения двух ветвей, имеющих общую историю, а не для сбора нескольких коммитов или патчей. Я чувствую, что выбор вишни - это в основном то, о чем вы просите.
Вы можете использовать git cherry (not cherry-pick!), чтобы узнать, какие коммиты должны быть вставлены в вашу ветку, затем git cherry-pick. Вы также можете явно спросить git cherry-pick, чтобы записать происхождение этих коммитов в случае, если вы выбрали вишню из публичного ветки. Вероятно, это лучший способ справиться с этой проблемой. (Другой может быть, чтобы экспортировать их через git format-patch, а затем импортировать их с помощью git -am/git -apply, но это, вероятно, будет медленнее, а также не будет записывать происхождение коммитов.)
EDIT: "Public" (ветвь) следует понимать как нечто, не подлежащее редактированию истории. Конечно, вы можете это сделать при разработке программного обеспечения с закрытым исходным кодом без открытого кода.