У вас действительно должен быть рабочий процесс, который позволяет вам делать все это путем слияния:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (wss)
Так что все, что вам нужно сделать, это git checkout v2.1
и git merge wss
. Если по какой-то причине вы действительно не можете этого сделать и не можете использовать git rebase , чтобы переместить ветку wss в нужное место, команда для получения одного коммита где-то и применения его в другом месте мерзавец вишневый . Просто отметьте ветку, к которой вы хотите его применить, и запустите git cherry-pick <SHA of commit to cherry-pick>
.
Некоторые способы, которыми ребаз может спасти вас:
Если ваша история выглядит так:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (v2-only) - x - x - x (wss)
Вы можете использовать git rebase --onto v2 v2-only wss
для перемещения wss непосредственно на v2:
- x - x - x (v2) - x - x - x (v2.1)
|\
| x - x - x (v2-only)
\
x - x - x (wss)
Тогда вы можете объединиться! Если вы действительно, действительно, действительно не можете добраться до точки, где вы можете объединиться, вы все равно можете использовать rebase для эффективного выполнения нескольких вишневых пиков одновременно:
# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase
Примечание: причина того, что для этого требуется дополнительная работа, заключается в том, что он создает дублирующие коммиты в вашем хранилище. Это на самом деле не очень хорошая вещь - весь смысл простого ветвления и объединения состоит в том, чтобы иметь возможность делать все, делая коммиты в одном месте и объединяя их там, где они нужны. Двойные коммиты означают намерение никогда не объединять эти две ветви (если вы решите, что захотите позже, вы получите конфликты).