Git - 更改 "origin commit" 分支

Git - Change "origin commit" of a branch

我很难找到一个 Git 通用工作流来从分支中删除一些提交(在 2 个引用之间);这是一个小例子:

我现在的状态是这样的:

* a878646 (develop) C8a
* 070acb7 C7a
| * 7937ce7 (HEAD, F1) C9b
| * fb4add2 C8b
| * 30456de C7b
|/  
* 6a0999e C6
* 45ae978 C5
* e8a2eeb (tag: T3, master) C4
* 24b98b2 (tag: T2) C3
* c874fc7 (tag: T1) C2
* a853900 C1

我想在我的平台上测试 "F1",但只有 "F1" 在 master 上的提交。

换句话说,我希望F1变成这样:

* 7937ce7 (HEAD, F1) C9b
* fb4add2 C8b
* 30456de C7b
* e8a2eeb (tag: T3, master) C4
* 24b98b2 (tag: T2) C3
* c874fc7 (tag: T1) C2
* a853900 C1

所以我必须删除提交 C5 和 C6。

经过测试,F1 应该合并到 master 上。

但是,这些提交必须留在 "develop" 分支上,因为在那之后我必须做一个 "git checkout develop && git rebase origin/master"

develop 的结果应该是:

* a878646 (HEAD, develop) C8a
* 070acb7 C7a
* 6a0999e C6
* 45ae978 C5
* 7937ce7 C9b (tag: T4, master)
* fb4add2 C8b
* 30456de C7b
* e8a2eeb (tag: T3) C4
* 24b98b2 (tag: T2) C3
* c874fc7 (tag: T1) C2
* a853900 C1

有没有办法简单地做到这一点? 这个问题反复出现,我搜索了另一种方法,而不是用多个 "cherry-pick" 一个提交一个提交...

我只使用 "master"、"F1" 搜索一种方法,但不知道这些分支之间和 F1 中的提交数量:/

我想我也许可以使用 "rebase onto" 但我不太明白如何...

非常感谢!

使用rebase --onto

git checkout F1
git rebase 6a0999e --onto master

git checkout F1
git rebase develop --onto master

使用git rebase -i

git checkout F1
git rebase -i master
# Remove lines with C5 and C6 and save.

使用git cherry-pick

git checkout master
git cherry-pick 6a0999e..7937ce7  # note that 6a0999e commit will not be cherry-picked - this is the commit before split
git branch F1 HEAD -f  # move F1 ref to current commit

请注意,提交哈希将不同于您的 "result on develop" 列表(在每个版本中)。