Как объединить главные фиксации от другого ответвления?

Кажется, что эта проблема была теперь устранена в LO 3.5.5 установленных от PPA.

7
задан Sam Liao 31 August 2009 в 06:42
поделиться

2 ответа

Похоже, вы можете захотеть сделать эти коммиты в ветке, отличной от 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 -n 5 master или cherries-pick release_tag. .master или что угодно. Взгляните на его справочную страницу !

Вы также можете использовать 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
10
ответ дан 6 December 2019 в 23:11
поделиться

Если вы просто хотите обновить ветку с помощью мастера, выполните:

git checkout branch;  git merge master
git rebase origin

Если не

0
ответ дан 6 December 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: