Кажется, что эта проблема была теперь устранена в LO 3.5.5 установленных от PPA.
Похоже, вы можете захотеть сделать эти коммиты в ветке, отличной от master, а затем объединить эту ветвь как с master, так и со второй ветвью:
git checkout working-branch
<do some work>
git commit
git checkout master
git merge working-branch
git checkout second-branch
git merge working-branch
Это намного, намного лучше, чем выбор вишни, потому что он не включает дублирование коммитов в истории, избавляет от любых проблем, связанных с двойным выбором вишневого коммита (чего вы в настоящее время должны избегать вручную) ... и именно так git разработан для работы. Я не знаю, что это за вторая ветвь, но то, что я описываю, по сути, представляет собой общий рабочий процесс периодического слияния ветвей обслуживания и тематических веток обратно в главную, а также любые другие соответствующие ветки с измененной версией или поддержкой.
Я настоятельно рекомендую вам принять рабочий процесс, в котором это делается путем слияния, как я описал выше, но чтобы ответить на заданный вами вопрос, если вам абсолютно необходимо поработать над мастером и вишневым подбором, вы можете немного написать себе скрипт, что-то вроде:
#!/bin/bash
# take two arguments:
# 1. other branch to put commits on
# 2. number of commits to cherry-pick from master
if ! git checkout $1; then
exit
fi
git rev-list --reverse -n $2 master |
while read commit; do
if ! git cherry-pick $commit; then
exit
fi
done
Очевидно, есть способы сделать скрипт более надежным, например, добавить возможность возобновления после выбора вишни, исправления которого не применяются должным образом, но это начало.
Вы можете повозиться с как вы, конечно, используете git-rev-list для выбора коммитов. Вы даже можете передать все аргументы, кроме первого, в git-rev-list, чтобы вы могли выполнить cherries-pick
или cherries-pick
или что угодно. Взгляните на его справочную страницу !
Вы также можете использовать git-rebase
, как предлагалось в другом месте, но поскольку вы на самом деле не хотите перемещать мастер, вы в конечном итоге сделаете что-то вроде этого:
git branch master-copy master
git rebase --onto <branch> master~5 master
git checkout <branch>
git merge master-copy
git branch -d master-copy
Если вы просто хотите обновить ветку с помощью мастера, выполните:
git checkout branch; git merge master
git rebase origin
Если не