Вы действительно должны иметь рабочий процесс, который позволяет вам делать все это путем слияния:
- 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 . Просто отметьте ветку, в которой вы хотите ее применить, и запустите git cherry-pick <SHA of commit to cherry-pick>
.
Некоторые из способов rebase могут спасти вас:
Если ваша история выглядит так:
- 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
Примечание: причина того, что для этого требуется дополнительная работа, заключается в том, что он создает дублирующие коммиты в вашем хранилище. Это на самом деле не очень хорошая вещь - весь смысл простого ветвления и объединения состоит в том, чтобы иметь возможность делать все, делая коммиты в одном месте и объединяя их там, где они нужны. Двойные коммиты означают намерение никогда не объединять эти две ветви (если вы решите, что захотите позже, вы получите конфликты).