我很难找到一个 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”,但仅限于 master 上的“F1”提交。
换句话说,我希望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 checkoutdevelopment && git rebase origin/master”
开发的结果应该是:
* 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
有没有办法简单地实现这一点? 这个问题经常出现,我寻找另一种方法,而不是用多个“樱桃挑选”一个提交一个提交......
我搜索一种仅使用“master”、“F1”的方法,并且不知道这些分支之间和 F1 中的提交数量:/
我想我也许可以使用“rebase into”,但我真的不明白如何......
非常感谢!
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@{0} # checkout in detached HEAD mode
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
请注意,提交哈希值将与“开发结果”列表中的不同(在每个版本中)。