Вы можете использовать git rebase
для повторного применения любого диапазона коммитов к любому конкретному коммиту, что звучит так, как вы хотите здесь. Эта техника работает для перемещения любого диапазона коммитов, но, как я упоминаю внизу, если у вас на самом деле есть только один коммит F
на вашей ветке, тогда легче просто выбрать вишню. Однако сначала я опишу, как бы вы это сделали с git rebase
, поскольку это более полезно в целом.
(нет. Я собираюсь слегка переименовать ваши коммиты, так как два B
s, C
s и т. Д. Будут иметь разные идентификаторы коммитов после перебазировки.)
После первого git svn rebase
Итак, если бы вы хотели сделать этот ребазинг после первого git svn rebase
, вы бы оказались в ситуации:
A-G-H-B'-C'-D'-E'
\
\-B-C-F
На данный момент вы могли бы сделать:
git rebase --onto C' C F
... который бы создал:
A-G-H-B'-C'-D'-E'
\ \
\-B-C-F \-F'''
После второго git svn rebase
Если ситуация будет такой, как вы описали после второго git svn rebase
, это выглядело бы так:
A-G-H-B'-C'-D'-E'
\
\-G'-H'-B''-C''-F''
В этом случае вы можете сделать то же самое:
git rebase --onto C' C'' F''
Для создания графика:
A-G-H-B'-C'-D'-E'
\ \
\ \- F'''
\
\-G'-H'-B''-C''-F''
... и вы можете просто забыть о G'
до F''
.
Однако в обоих этих случаях вы перемещаете только один коммит, так что, вероятно, проще выбрать коммит. Другими словами, вы можете сделать:
git checkout -b new-experiment C'
git cherry-pick F
Надеюсь, это пригодится.