Подтвердить что ты не робот

Каков наилучший способ git исправить поддиапазон ветки?

В Subversion легко слить ряд изменений/разностей из ветки с помощью "svn merge -r a: b mybranch". Но в git я обнаружил, что только вишня может выбрать одну фиксацию из ветки, чтобы применить этот патч к моей текущей рабочей ветке. Так что мне интересно, есть ли быстрый способ применить все коммиты одним махом между двумя тегами в ветке bugfix до текущей текущей ветки?

4b9b3361

Ответ 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" (ветвь) следует понимать как нечто, не подлежащее редактированию истории. Конечно, вы можете это сделать при разработке программного обеспечения с закрытым исходным кодом без открытого кода.